* [PATCH v3 1/4] dt-bindings: connector: Add Toradex camera connector
2026-10-22 14:31 [PATCH v3 0/4] arm64: dts: freescale: Add Verdin iMX8M OV5640 camera overlays Ernest Van Hoecke
@ 2026-10-22 14:31 ` Ernest Van Hoecke
2026-10-22 18:13 ` Conor Dooley
2026-10-22 14:31 ` [PATCH v3 2/4] arm64: dts: freescale: imx8m{m,p}-verdin: Add camera connector nexus Ernest Van Hoecke
` (2 subsequent siblings)
3 siblings, 1 reply; 11+ messages in thread
From: Ernest Van Hoecke @ 2026-10-22 14:31 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Kieran Bingham, Francesco Dolcini, Dave Stevenson, devicetree,
imx, linux-arm-kernel, linux-kernel, Ernest Van Hoecke
From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
Toradex boards route the sideband signals of their 24-pin camera
connectors to different GPIO controllers. Camera overlays which name
those controllers directly must therefore be duplicated for each host
board.
Describe reset, power-down, detection and power-control as
connector-local GPIO functions. This lets an accessory overlay remain
independent of the host wiring. MIPI CSI-2, I2C, clocks and supplies
remain described separately because the GPIO nexus does not abstract
them.
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
---
.../connector/toradex,camera-connector.yaml | 81 ++++++++++++++++++++++
1 file changed, 81 insertions(+)
diff --git a/Documentation/devicetree/bindings/connector/toradex,camera-connector.yaml b/Documentation/devicetree/bindings/connector/toradex,camera-connector.yaml
new file mode 100644
index 000000000000..27fee3defde7
--- /dev/null
+++ b/Documentation/devicetree/bindings/connector/toradex,camera-connector.yaml
@@ -0,0 +1,81 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/connector/toradex,camera-connector.yaml#
+$schema: http://devicetree.org/meta-schemas/base.yaml#
+
+title: Toradex camera connector GPIO nexus
+
+maintainers:
+ - Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
+ - Toradex Linux BSP Team <linux-bsp@toradex.com>
+
+description: |
+ Toradex carrier boards share a common 24-pin, 0.5 mm pitch FFC/FPC camera
+ connector carrying MIPI CSI-2, I2C, clock, power, and sideband GPIO signals.
+ This binding describes the sideband signals as a GPIO nexus. The other
+ connector resources remain described by the surrounding board device tree.
+
+ The nexus exposes connector-local GPIO function numbers to camera overlays
+ and maps the functions wired by a carrier board to their GPIO controllers.
+ GPIO specifiers contain a function number followed by standard GPIO flags.
+ A board may omit functions which it does not wire.
+
+ The function numbers are:
+ - 0: Camera reset, connector pin 11
+ - 1: Camera power-down, connector pin 22
+ - 2: Camera identification, connector pin 23
+ - 3: Camera power control, connector pin 24
+
+properties:
+ compatible:
+ const: toradex,camera-connector
+
+ "#gpio-cells":
+ const: 2
+
+ gpio-map:
+ minItems: 1
+ maxItems: 4
+
+ gpio-map-mask:
+ items:
+ - const: 0xffffffff
+ - const: 0
+
+ gpio-map-pass-thru:
+ items:
+ - const: 0
+ - const: 0xffffffff
+
+required:
+ - compatible
+ - "#gpio-cells"
+ - gpio-map
+ - gpio-map-mask
+ - gpio-map-pass-thru
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+
+ camera-connector {
+ compatible = "toradex,camera-connector";
+ #gpio-cells = <2>;
+ /*
+ * 0: Camera reset, connector pin 11
+ * 1: Camera power-down, connector pin 22
+ * 2: Camera identification, connector pin 23
+ * 3: Camera power control, connector pin 24
+ */
+ gpio-map = <0 0 &gpio1 0 GPIO_ACTIVE_HIGH>,
+ <1 0 &gpio1 1 GPIO_ACTIVE_HIGH>,
+ <2 0 &gpio1 2 GPIO_ACTIVE_HIGH>,
+ <3 0 &gpio1 3 GPIO_ACTIVE_HIGH>;
+ gpio-map-mask = <0xffffffff 0x0>;
+ gpio-map-pass-thru = <0x0 0xffffffff>;
+ };
+
+...
--
2.43.0
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH v3 1/4] dt-bindings: connector: Add Toradex camera connector
2026-10-22 14:31 ` [PATCH v3 1/4] dt-bindings: connector: Add Toradex camera connector Ernest Van Hoecke
@ 2026-10-22 18:13 ` Conor Dooley
0 siblings, 0 replies; 11+ messages in thread
From: Conor Dooley @ 2026-10-22 18:13 UTC (permalink / raw)
To: Ernest Van Hoecke
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
Kieran Bingham, Francesco Dolcini, Dave Stevenson, devicetree,
imx, linux-arm-kernel, linux-kernel, Ernest Van Hoecke
[-- Attachment #1: Type: text/plain, Size: 839 bytes --]
On Thu, Oct 22, 2026 at 04:31:25PM +0200, Ernest Van Hoecke wrote:
> From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
>
> Toradex boards route the sideband signals of their 24-pin camera
> connectors to different GPIO controllers. Camera overlays which name
> those controllers directly must therefore be duplicated for each host
> board.
>
> Describe reset, power-down, detection and power-control as
> connector-local GPIO functions. This lets an accessory overlay remain
> independent of the host wiring. MIPI CSI-2, I2C, clocks and supplies
> remain described separately because the GPIO nexus does not abstract
> them.
>
> Reviewed-by: Frank Li <Frank.Li@nxp.com>
> Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
Acked-by: Conor Dooley <conor.dooley@microchip.com>
pw-bot: not-applicable
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v3 2/4] arm64: dts: freescale: imx8m{m,p}-verdin: Add camera connector nexus
2026-10-22 14:31 [PATCH v3 0/4] arm64: dts: freescale: Add Verdin iMX8M OV5640 camera overlays Ernest Van Hoecke
2026-10-22 14:31 ` [PATCH v3 1/4] dt-bindings: connector: Add Toradex camera connector Ernest Van Hoecke
@ 2026-10-22 14:31 ` Ernest Van Hoecke
2026-10-22 21:07 ` Frank Li
2026-10-22 14:31 ` [PATCH v3 3/4] arm64: dts: freescale: imx8m{m,p}-verdin: Add shared OV5640 overlays Ernest Van Hoecke
2026-10-22 14:31 ` [PATCH v3 4/4] arm64: dts: freescale: imx8mp-verdin: Add mezzanine " Ernest Van Hoecke
3 siblings, 1 reply; 11+ messages in thread
From: Ernest Van Hoecke @ 2026-10-22 14:31 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Kieran Bingham, Francesco Dolcini, Dave Stevenson, devicetree,
imx, linux-arm-kernel, linux-kernel, Ernest Van Hoecke
From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
The Verdin Development Board, Dahlia and Mallow expose the same 24-pin CSI
camera connector, while Verdin iMX8M Mini and Verdin iMX8M Plus route its
sideband signals and media pipeline through different SoC resources.
Add a GPIO nexus to each carrier description and stable Verdin-level labels
for each module's CSI_1 I2C bus, receiver and capture engine. Keeping the
nexus in the carrier files avoids describing the physical connector on
carriers which do not provide it.
This gives accessory overlays a stable connector and media interface
without embedding either module's wiring in the accessory description.
Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
---
arch/arm64/boot/dts/freescale/imx8mm-verdin-dahlia.dtsi | 17 +++++++++++++++++
arch/arm64/boot/dts/freescale/imx8mm-verdin-dev.dtsi | 17 +++++++++++++++++
arch/arm64/boot/dts/freescale/imx8mm-verdin-mallow.dtsi | 17 +++++++++++++++++
arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi | 8 +++++++-
arch/arm64/boot/dts/freescale/imx8mp-verdin-dahlia.dtsi | 17 +++++++++++++++++
arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi | 17 +++++++++++++++++
arch/arm64/boot/dts/freescale/imx8mp-verdin-mallow.dtsi | 17 +++++++++++++++++
arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi | 7 ++++++-
8 files changed, 115 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/boot/dts/freescale/imx8mm-verdin-dahlia.dtsi b/arch/arm64/boot/dts/freescale/imx8mm-verdin-dahlia.dtsi
index 3d0b14968131..4cf77559e69b 100644
--- a/arch/arm64/boot/dts/freescale/imx8mm-verdin-dahlia.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mm-verdin-dahlia.dtsi
@@ -4,6 +4,23 @@
*/
/ {
+ verdin_camera_connector: camera-connector-0 {
+ compatible = "toradex,camera-connector";
+ #gpio-cells = <2>;
+ /*
+ * CAM_1_CON_RST (pin 11) - Verdin GPIO_5 (SODIMM 216)
+ * CAM_1_CON_PWRDWN (pin 22) - Verdin GPIO_6 (SODIMM 218)
+ * CAM_1_CON_IC_DETECT (pin 23) - Verdin GPIO_7 (SODIMM 220)
+ * CAM_1_CON_PWRCTRL (pin 24) - Verdin GPIO_8 (SODIMM 222)
+ */
+ gpio-map = <0 0 &gpio1 0 GPIO_ACTIVE_HIGH>,
+ <1 0 &gpio1 11 GPIO_ACTIVE_HIGH>,
+ <2 0 &gpio1 8 GPIO_ACTIVE_HIGH>,
+ <3 0 &gpio1 9 GPIO_ACTIVE_HIGH>;
+ gpio-map-mask = <0xffffffff 0x0>;
+ gpio-map-pass-thru = <0x0 0xffffffff>;
+ };
+
sound_card: sound-card {
compatible = "simple-audio-card";
simple-audio-card,bitclock-master = <&dailink_master>;
diff --git a/arch/arm64/boot/dts/freescale/imx8mm-verdin-dev.dtsi b/arch/arm64/boot/dts/freescale/imx8mm-verdin-dev.dtsi
index 1d8d146d9eeb..51a836324c16 100644
--- a/arch/arm64/boot/dts/freescale/imx8mm-verdin-dev.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mm-verdin-dev.dtsi
@@ -4,6 +4,23 @@
*/
/ {
+ verdin_camera_connector: camera-connector-0 {
+ compatible = "toradex,camera-connector";
+ #gpio-cells = <2>;
+ /*
+ * CAM_1_CON_RST (pin 11) - Verdin GPIO_5 (SODIMM 216)
+ * CAM_1_CON_PWRDWN (pin 22) - Verdin GPIO_6 (SODIMM 218)
+ * CAM_1_CON_IC_DETECT (pin 23) - Verdin GPIO_7 (SODIMM 220)
+ * CAM_1_CON_PWRCTRL (pin 24) - Verdin GPIO_8 (SODIMM 222)
+ */
+ gpio-map = <0 0 &gpio1 0 GPIO_ACTIVE_HIGH>,
+ <1 0 &gpio1 11 GPIO_ACTIVE_HIGH>,
+ <2 0 &gpio1 8 GPIO_ACTIVE_HIGH>,
+ <3 0 &gpio1 9 GPIO_ACTIVE_HIGH>;
+ gpio-map-mask = <0xffffffff 0x0>;
+ gpio-map-pass-thru = <0x0 0xffffffff>;
+ };
+
sound_card: sound-card {
compatible = "simple-audio-card";
simple-audio-card,bitclock-master = <&dailink_master>;
diff --git a/arch/arm64/boot/dts/freescale/imx8mm-verdin-mallow.dtsi b/arch/arm64/boot/dts/freescale/imx8mm-verdin-mallow.dtsi
index 4a0799d63446..5951cd19a84c 100644
--- a/arch/arm64/boot/dts/freescale/imx8mm-verdin-mallow.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mm-verdin-mallow.dtsi
@@ -11,6 +11,23 @@
#include <dt-bindings/leds/common.h>
/ {
+ verdin_camera_connector: camera-connector-0 {
+ compatible = "toradex,camera-connector";
+ #gpio-cells = <2>;
+ /*
+ * CAM_1_CON_RST (pin 11) - Verdin GPIO_5 (SODIMM 216)
+ * CAM_1_CON_PWRDWN (pin 22) - Verdin GPIO_6 (SODIMM 218)
+ * CAM_1_CON_IC_DETECT (pin 23) - Verdin GPIO_7 (SODIMM 220)
+ * CAM_1_CON_PWRCTRL (pin 24) - Verdin GPIO_8 (SODIMM 222)
+ */
+ gpio-map = <0 0 &gpio1 0 GPIO_ACTIVE_HIGH>,
+ <1 0 &gpio1 11 GPIO_ACTIVE_HIGH>,
+ <2 0 &gpio1 8 GPIO_ACTIVE_HIGH>,
+ <3 0 &gpio1 9 GPIO_ACTIVE_HIGH>;
+ gpio-map-mask = <0xffffffff 0x0>;
+ gpio-map-pass-thru = <0x0 0xffffffff>;
+ };
+
leds {
compatible = "gpio-leds";
pinctrl-names = "default";
diff --git a/arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi b/arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi
index 4f64c5da8d15..1eb6b5d2b432 100644
--- a/arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi
@@ -224,6 +224,9 @@ &cpu_crit0 {
temperature = <105000>;
};
+/* Verdin CSI_1 */
+verdin_csi_capture: &csi {};
+
&ddrc {
operating-points-v2 = <&ddrc_opp_table>;
@@ -596,7 +599,7 @@ &i2c2 {
/* Verdin I2C_3_HDMI N/A */
/* Verdin I2C_4_CSI */
-&i2c3 {
+verdin_csi_i2c: &i2c3 {
clock-frequency = <400000>;
pinctrl-names = "default", "gpio";
pinctrl-0 = <&pinctrl_i2c3>;
@@ -695,6 +698,9 @@ eeprom_carrier_board: eeprom@57 {
};
};
+/* Verdin CSI_1 */
+verdin_csi_rx: &mipi_csi {};
+
/* Verdin PCIE_1 */
&pcie0 {
assigned-clocks = <&clk IMX8MM_CLK_PCIE1_AUX>,
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dahlia.dtsi b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dahlia.dtsi
index 0e218e6b8e29..164031d5dd86 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dahlia.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dahlia.dtsi
@@ -4,6 +4,23 @@
*/
/ {
+ verdin_camera_connector: camera-connector-0 {
+ compatible = "toradex,camera-connector";
+ #gpio-cells = <2>;
+ /*
+ * CAM_1_CON_RST (pin 11) - Verdin GPIO_5 (SODIMM 216)
+ * CAM_1_CON_PWRDWN (pin 22) - Verdin GPIO_6 (SODIMM 218)
+ * CAM_1_CON_IC_DETECT (pin 23) - Verdin GPIO_7 (SODIMM 220)
+ * CAM_1_CON_PWRCTRL (pin 24) - Verdin GPIO_8 (SODIMM 222)
+ */
+ gpio-map = <0 0 &gpio1 7 GPIO_ACTIVE_HIGH>,
+ <1 0 &gpio1 8 GPIO_ACTIVE_HIGH>,
+ <2 0 &gpio4 3 GPIO_ACTIVE_HIGH>,
+ <3 0 &gpio4 1 GPIO_ACTIVE_HIGH>;
+ gpio-map-mask = <0xffffffff 0x0>;
+ gpio-map-pass-thru = <0x0 0xffffffff>;
+ };
+
native-hdmi-connector {
compatible = "hdmi-connector";
label = "X21";
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi
index 72a4f846d694..c52e46738110 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi
@@ -4,6 +4,23 @@
*/
/ {
+ verdin_camera_connector: camera-connector-0 {
+ compatible = "toradex,camera-connector";
+ #gpio-cells = <2>;
+ /*
+ * CAM_1_CON_RST (pin 11) - Verdin GPIO_5 (SODIMM 216)
+ * CAM_1_CON_PWRDWN (pin 22) - Verdin GPIO_6 (SODIMM 218)
+ * CAM_1_CON_IC_DETECT (pin 23) - Verdin GPIO_7 (SODIMM 220)
+ * CAM_1_CON_PWRCTRL (pin 24) - Verdin GPIO_8 (SODIMM 222)
+ */
+ gpio-map = <0 0 &gpio1 7 GPIO_ACTIVE_HIGH>,
+ <1 0 &gpio1 8 GPIO_ACTIVE_HIGH>,
+ <2 0 &gpio4 3 GPIO_ACTIVE_HIGH>,
+ <3 0 &gpio4 1 GPIO_ACTIVE_HIGH>;
+ gpio-map-mask = <0xffffffff 0x0>;
+ gpio-map-pass-thru = <0x0 0xffffffff>;
+ };
+
native-hdmi-connector {
compatible = "hdmi-connector";
label = "X37";
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-mallow.dtsi b/arch/arm64/boot/dts/freescale/imx8mp-verdin-mallow.dtsi
index 846b36706821..b915fbbd04b6 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp-verdin-mallow.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-mallow.dtsi
@@ -11,6 +11,23 @@
#include <dt-bindings/leds/common.h>
/ {
+ verdin_camera_connector: camera-connector-0 {
+ compatible = "toradex,camera-connector";
+ #gpio-cells = <2>;
+ /*
+ * CAM_1_CON_RST (pin 11) - Verdin GPIO_5 (SODIMM 216)
+ * CAM_1_CON_PWRDWN (pin 22) - Verdin GPIO_6 (SODIMM 218)
+ * CAM_1_CON_IC_DETECT (pin 23) - Verdin GPIO_7 (SODIMM 220)
+ * CAM_1_CON_PWRCTRL (pin 24) - Verdin GPIO_8 (SODIMM 222)
+ */
+ gpio-map = <0 0 &gpio1 7 GPIO_ACTIVE_HIGH>,
+ <1 0 &gpio1 8 GPIO_ACTIVE_HIGH>,
+ <2 0 &gpio4 3 GPIO_ACTIVE_HIGH>,
+ <3 0 &gpio4 1 GPIO_ACTIVE_HIGH>;
+ gpio-map-mask = <0xffffffff 0x0>;
+ gpio-map-pass-thru = <0x0 0xffffffff>;
+ };
+
native-hdmi-connector {
compatible = "hdmi-connector";
label = "X14";
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi b/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
index 9fee2cf9ef54..300326de3438 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
@@ -686,7 +686,7 @@ atmel_mxt_ts_mezzanine: touch-mezzanine@4a {
};
/* Verdin I2C_4_CSI */
-&i2c3 {
+verdin_csi_i2c: &i2c3 {
clock-frequency = <400000>;
pinctrl-names = "default", "gpio";
pinctrl-0 = <&pinctrl_i2c3>;
@@ -796,6 +796,11 @@ &i2c5 {
single-master;
};
+/* Verdin CSI_1 */
+verdin_csi_capture: &isi_0 {};
+
+verdin_csi_rx: &mipi_csi_0 {};
+
/* Verdin PCIE_1 */
&pcie {
pinctrl-names = "default";
--
2.43.0
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH v3 2/4] arm64: dts: freescale: imx8m{m,p}-verdin: Add camera connector nexus
2026-10-22 14:31 ` [PATCH v3 2/4] arm64: dts: freescale: imx8m{m,p}-verdin: Add camera connector nexus Ernest Van Hoecke
@ 2026-10-22 21:07 ` Frank Li
2026-10-23 14:05 ` Ernest Van Hoecke
0 siblings, 1 reply; 11+ messages in thread
From: Frank Li @ 2026-10-22 21:07 UTC (permalink / raw)
To: Ernest Van Hoecke
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
Kieran Bingham, Francesco Dolcini, Dave Stevenson, devicetree,
imx, linux-arm-kernel, linux-kernel, Ernest Van Hoecke
On Thu, Oct 22, 2026 at 04:31:26PM +0200, Ernest Van Hoecke wrote:
> From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
>
> The Verdin Development Board, Dahlia and Mallow expose the same 24-pin CSI
> camera connector, while Verdin iMX8M Mini and Verdin iMX8M Plus route its
> sideband signals and media pipeline through different SoC resources.
>
> Add a GPIO nexus to each carrier description and stable Verdin-level labels
> for each module's CSI_1 I2C bus, receiver and capture engine. Keeping the
> nexus in the carrier files avoids describing the physical connector on
> carriers which do not provide it.
>
> This gives accessory overlays a stable connector and media interface
> without embedding either module's wiring in the accessory description.
>
> Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> ---
...
Thank you for good progress.
>
> +/* Verdin CSI_1 */
> +verdin_csi_capture: &csi {};
> +
> &ddrc {
> operating-points-v2 = <&ddrc_opp_table>;
>
> @@ -596,7 +599,7 @@ &i2c2 {
> /* Verdin I2C_3_HDMI N/A */
>
> /* Verdin I2C_4_CSI */
> -&i2c3 {
> +verdin_csi_i2c: &i2c3 {
> clock-frequency = <400000>;
> pinctrl-names = "default", "gpio";
> pinctrl-0 = <&pinctrl_i2c3>;
> @@ -695,6 +698,9 @@ eeprom_carrier_board: eeprom@57 {
> };
> };
>
> +/* Verdin CSI_1 */
> +verdin_csi_rx: &mipi_csi {};
> +
Can you refer to port?
&mipi_csi {
ports {
verdin_csi_rx_port: port@0 {
^^^^
}
}
}
because difference mipi controller may use difference port index. If
define point to port,
ov5460 can reuse if port@0 change to port@1.
Frank
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH v3 2/4] arm64: dts: freescale: imx8m{m,p}-verdin: Add camera connector nexus
2026-10-22 21:07 ` Frank Li
@ 2026-10-23 14:05 ` Ernest Van Hoecke
0 siblings, 0 replies; 11+ messages in thread
From: Ernest Van Hoecke @ 2026-10-23 14:05 UTC (permalink / raw)
To: Frank Li
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
Kieran Bingham, Francesco Dolcini, Dave Stevenson, devicetree,
imx, linux-arm-kernel, linux-kernel, Ernest Van Hoecke
On Thu, Oct 22, 2026 at 05:07:47PM -0400, Frank Li wrote:
> On Thu, Oct 22, 2026 at 04:31:26PM +0200, Ernest Van Hoecke wrote:
> > From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> >
> > The Verdin Development Board, Dahlia and Mallow expose the same 24-pin CSI
> > camera connector, while Verdin iMX8M Mini and Verdin iMX8M Plus route its
> > sideband signals and media pipeline through different SoC resources.
> >
> > Add a GPIO nexus to each carrier description and stable Verdin-level labels
> > for each module's CSI_1 I2C bus, receiver and capture engine. Keeping the
> > nexus in the carrier files avoids describing the physical connector on
> > carriers which do not provide it.
> >
> > This gives accessory overlays a stable connector and media interface
> > without embedding either module's wiring in the accessory description.
> >
> > Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> > ---
> ...
> Thank you for good progress.
>
> >
> > +/* Verdin CSI_1 */
> > +verdin_csi_capture: &csi {};
> > +
> > &ddrc {
> > operating-points-v2 = <&ddrc_opp_table>;
> >
> > @@ -596,7 +599,7 @@ &i2c2 {
> > /* Verdin I2C_3_HDMI N/A */
> >
> > /* Verdin I2C_4_CSI */
> > -&i2c3 {
> > +verdin_csi_i2c: &i2c3 {
> > clock-frequency = <400000>;
> > pinctrl-names = "default", "gpio";
> > pinctrl-0 = <&pinctrl_i2c3>;
> > @@ -695,6 +698,9 @@ eeprom_carrier_board: eeprom@57 {
> > };
> > };
> >
> > +/* Verdin CSI_1 */
> > +verdin_csi_rx: &mipi_csi {};
> > +
>
> Can you refer to port?
>
> &mipi_csi {
> ports {
> verdin_csi_rx_port: port@0 {
> ^^^^
> }
> }
> }
>
> because difference mipi controller may use difference port index. If
> define point to port,
>
> ov5460 can reuse if port@0 change to port@1.
>
> Frank
Hi Frank,
Good point. In v4, I can refer to ports.
Ernest
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v3 3/4] arm64: dts: freescale: imx8m{m,p}-verdin: Add shared OV5640 overlays
2026-10-22 14:31 [PATCH v3 0/4] arm64: dts: freescale: Add Verdin iMX8M OV5640 camera overlays Ernest Van Hoecke
2026-10-22 14:31 ` [PATCH v3 1/4] dt-bindings: connector: Add Toradex camera connector Ernest Van Hoecke
2026-10-22 14:31 ` [PATCH v3 2/4] arm64: dts: freescale: imx8m{m,p}-verdin: Add camera connector nexus Ernest Van Hoecke
@ 2026-10-22 14:31 ` Ernest Van Hoecke
2026-10-22 14:31 ` [PATCH v3 4/4] arm64: dts: freescale: imx8mp-verdin: Add mezzanine " Ernest Van Hoecke
3 siblings, 0 replies; 11+ messages in thread
From: Ernest Van Hoecke @ 2026-10-22 14:31 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Kieran Bingham, Francesco Dolcini, Dave Stevenson, devicetree,
imx, linux-arm-kernel, linux-kernel, Ernest Van Hoecke
From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
The current and legacy Toradex OV5640 camera modules use the same connector
on Verdin iMX8M Mini and Verdin iMX8M Plus. Keeping SoC and carrier GPIO
references in the overlays would require a separate camera description for
every combination.
Use the connector nexus and stable CSI_1 media labels to describe the
camera once. Keep separate variants only for the current 27 MHz and legacy
24 MHz camera oscillators.
Build both DTBOs for installation and compose each with the two Verdin
Development Board DTBs to validate the module integrations.
Link: https://developer.toradex.com/hardware/accessories/cameras/csi-camera-module-5mp-ov5640-arducam
Link: https://developer.toradex.com/hardware/legacy-products/other/csi-camera-module-5mp-ov5640/
Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
---
arch/arm64/boot/dts/freescale/Makefile | 11 +++
.../dts/freescale/imx8m-verdin-ov5640-24mhz.dtso | 17 +++++
.../boot/dts/freescale/imx8m-verdin-ov5640.dtsi | 78 ++++++++++++++++++++++
.../boot/dts/freescale/imx8m-verdin-ov5640.dtso | 18 +++++
4 files changed, 124 insertions(+)
diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
index a80cccf34eb5..5ce923d87072 100644
--- a/arch/arm64/boot/dts/freescale/Makefile
+++ b/arch/arm64/boot/dts/freescale/Makefile
@@ -120,6 +120,8 @@ dtb-$(CONFIG_ARCH_MXC) += imx8dxl-hummingboard-telematics.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8dxp-tqma8xdp-mba8xx.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8dxp-tqma8xdps-mb-smarc-2.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8m-verdin-ov5640-24mhz.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx8m-verdin-ov5640.dtbo
dtb-$(CONFIG_ARCH_MXC) += imx8mm-beacon-kit.dtb
imx8mm-data-modul-edm-sbc-overlay-cm4-dtbs := \
@@ -275,6 +277,8 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-wifi-dahlia.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-wifi-dev-dsi-to-hdmi.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-wifi-dev-dsi-to-lvds-panel-cap-touch-10inch.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-wifi-dev-nau8822-btl.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-wifi-dev-ov5640-24mhz.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-wifi-dev-ov5640.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-wifi-dev-panel-cap-touch-7inch-dsi.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-wifi-dev-uart4-mcu.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-wifi-dev.dtb
@@ -296,6 +300,8 @@ imx8mm-verdin-wifi-dev-dsi-to-hdmi-dtbs := imx8mm-verdin-wifi-dev.dtb imx8mm-ver
imx8mm-verdin-wifi-dev-dsi-to-lvds-panel-cap-touch-10inch-dtbs := imx8mm-verdin-wifi-dev.dtb \
imx8mm-verdin-dsi-to-lvds-panel-cap-touch-10inch.dtbo
imx8mm-verdin-wifi-dev-nau8822-btl-dtbs := imx8mm-verdin-wifi-dev.dtb imx8mm-verdin-dev-nau8822-btl.dtbo
+imx8mm-verdin-wifi-dev-ov5640-24mhz-dtbs := imx8mm-verdin-wifi-dev.dtb imx8m-verdin-ov5640-24mhz.dtbo
+imx8mm-verdin-wifi-dev-ov5640-dtbs := imx8mm-verdin-wifi-dev.dtb imx8m-verdin-ov5640.dtbo
imx8mm-verdin-wifi-dev-panel-cap-touch-7inch-dsi-dtbs := imx8mm-verdin-wifi-dev.dtb \
imx8mm-verdin-panel-cap-touch-7inch-dsi.dtbo
imx8mm-verdin-wifi-dev-uart4-mcu-dtbs := imx8mm-verdin-wifi-dev.dtb imx8mm-verdin-uart4-mcu.dtbo
@@ -737,12 +743,17 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-mallow.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-yavia.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-zinnia.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dahlia.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev-ov5640-24mhz.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev-ov5640.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-ivy.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-mallow.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-yavia.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-zinnia.dtb
+imx8mp-verdin-wifi-dev-ov5640-24mhz-dtbs := imx8mp-verdin-wifi-dev.dtb imx8m-verdin-ov5640-24mhz.dtbo
+imx8mp-verdin-wifi-dev-ov5640-dtbs := imx8mp-verdin-wifi-dev.dtb imx8m-verdin-ov5640.dtbo
+
imx8mp-evk-lvds0-imx-dlvds-hdmi-channel0-dtbs += imx8mp-evk.dtb imx8mp-evk-lvds0-imx-dlvds-hdmi-channel0.dtbo
imx8mp-evk-lvds0-imx-lvds-hdmi-dtbs += imx8mp-evk.dtb imx8mp-evk-lvds0-imx-lvds-hdmi.dtbo
imx8mp-evk-lvds1-imx-dlvds-hdmi-channel0-dtbs += imx8mp-evk.dtb imx8mp-evk-lvds1-imx-dlvds-hdmi-channel0.dtbo
diff --git a/arch/arm64/boot/dts/freescale/imx8m-verdin-ov5640-24mhz.dtso b/arch/arm64/boot/dts/freescale/imx8m-verdin-ov5640-24mhz.dtso
new file mode 100644
index 000000000000..af77c065c3c2
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8m-verdin-ov5640-24mhz.dtso
@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Copyright (c) Toradex
+ *
+ * Toradex CSI Camera Module 5MP OV5640 on Verdin CSI_1.
+ *
+ * https://developer.toradex.com/hardware/legacy-products/other/csi-camera-module-5mp-ov5640/
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "imx8m-verdin-ov5640.dtsi"
+
+&clk_ov5640_osc {
+ clock-frequency = <24000000>;
+};
diff --git a/arch/arm64/boot/dts/freescale/imx8m-verdin-ov5640.dtsi b/arch/arm64/boot/dts/freescale/imx8m-verdin-ov5640.dtsi
new file mode 100644
index 000000000000..39204a14f0d0
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8m-verdin-ov5640.dtsi
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Copyright (c) Toradex
+ *
+ * Common device tree include for Toradex OV5640 CSI camera on Verdin CSI_1.
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+
+&{/} {
+ clk_ov5640_osc: ov5640-xclk {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ };
+
+ reg_ov5640: regulator-camera {
+ compatible = "regulator-fixed";
+ /* CAM_1_CON_PWRCTRL, pin 24 */
+ gpios = <&verdin_camera_connector 3 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ regulator-name = "V_CSI";
+ startup-delay-us = <5000>;
+ };
+};
+
+&verdin_csi_capture {
+ status = "okay";
+};
+
+/* Verdin I2C_4_CSI */
+&verdin_csi_i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ status = "okay";
+
+ camera@3c {
+ compatible = "ovti,ov5640";
+ reg = <0x3c>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_gpio5>, <&pinctrl_gpio6>;
+ clocks = <&clk_ov5640_osc>;
+ clock-names = "xclk";
+ AVDD-supply = <®_ov5640>;
+ DOVDD-supply = <®_ov5640>;
+ DVDD-supply = <®_ov5640>;
+ /* CAM_1_CON_PWRDWN, pin 22 */
+ powerdown-gpios = <&verdin_camera_connector 1 GPIO_ACTIVE_HIGH>;
+ /* CAM_1_CON_RST, pin 11 */
+ reset-gpios = <&verdin_camera_connector 0 GPIO_ACTIVE_LOW>;
+
+ port {
+ ov5640_to_verdin_csi_rx: endpoint {
+ clock-lanes = <0>;
+ data-lanes = <1 2>;
+ remote-endpoint = <&verdin_csi_rx_in>;
+ };
+ };
+ };
+};
+
+&verdin_csi_rx {
+ status = "okay";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ verdin_csi_rx_in: endpoint {
+ data-lanes = <1 2>;
+ remote-endpoint = <&ov5640_to_verdin_csi_rx>;
+ };
+ };
+ };
+};
diff --git a/arch/arm64/boot/dts/freescale/imx8m-verdin-ov5640.dtso b/arch/arm64/boot/dts/freescale/imx8m-verdin-ov5640.dtso
new file mode 100644
index 000000000000..332811f53743
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8m-verdin-ov5640.dtso
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Copyright (c) Toradex
+ *
+ * Toradex CSI Camera Set 5MP OV5640 on Verdin CSI_1.
+ *
+ * https://developer.toradex.com/hardware/accessories/cameras/csi-camera-module-5mp-ov5640-arducam
+ * https://www.toradex.com/accessories/csi-camera-ov5640
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "imx8m-verdin-ov5640.dtsi"
+
+&clk_ov5640_osc {
+ clock-frequency = <27000000>;
+};
--
2.43.0
^ permalink raw reply [flat|nested] 11+ messages in thread* [PATCH v3 4/4] arm64: dts: freescale: imx8mp-verdin: Add mezzanine OV5640 overlays
2026-10-22 14:31 [PATCH v3 0/4] arm64: dts: freescale: Add Verdin iMX8M OV5640 camera overlays Ernest Van Hoecke
` (2 preceding siblings ...)
2026-10-22 14:31 ` [PATCH v3 3/4] arm64: dts: freescale: imx8m{m,p}-verdin: Add shared OV5640 overlays Ernest Van Hoecke
@ 2026-10-22 14:31 ` Ernest Van Hoecke
2026-10-22 21:20 ` Frank Li
3 siblings, 1 reply; 11+ messages in thread
From: Ernest Van Hoecke @ 2026-10-22 14:31 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Kieran Bingham, Francesco Dolcini, Dave Stevenson, devicetree,
imx, linux-arm-kernel, linux-kernel, Ernest Van Hoecke
From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
The Verdin iMX8M Plus exposes its second MIPI CSI-2 interface through the
Verdin iMX8M Plus Mezzanine. Add overlays for using a Toradex OV5640 camera
on this interface.
The mezzanine can route the camera control signals through two jumper
configurations. Describe each configuration as a GPIO nexus mapping so the
camera description remains independent of the physical routing.
The default positions share the native CSI_1 GPIOs and are intended for a
single camera. The alternate positions permit simultaneous native and
mezzanine cameras, but conflict with the Atmel MXT touchscreen GPIO.
The current camera set uses a 27 MHz on-board oscillator. The legacy camera
module uses 24 MHz, so provide variants for both.
Link: https://developer.toradex.com/hardware/verdin-som-family/add-ons/verdin-imx8m-plus-mezzanine/
Link: https://developer.toradex.com/hardware/accessories/cameras/csi-camera-module-5mp-ov5640-arducam
Link: https://developer.toradex.com/hardware/legacy-products/other/csi-camera-module-5mp-ov5640/
Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
---
arch/arm64/boot/dts/freescale/Makefile | 19 ++++++
...-verdin-mezzanine-ov5640-24mhz-alt-jumpers.dtso | 19 ++++++
...din-mezzanine-ov5640-24mhz-default-jumpers.dtso | 18 +++++
...imx8mp-verdin-mezzanine-ov5640-alt-jumpers.dtso | 38 +++++++++++
...mp-verdin-mezzanine-ov5640-default-jumpers.dtso | 42 ++++++++++++
.../freescale/imx8mp-verdin-mezzanine-ov5640.dtsi | 78 ++++++++++++++++++++++
6 files changed, 214 insertions(+)
diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
index 5ce923d87072..32168279f933 100644
--- a/arch/arm64/boot/dts/freescale/Makefile
+++ b/arch/arm64/boot/dts/freescale/Makefile
@@ -736,6 +736,10 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mp-venice-gw73xx-2x.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-venice-gw74xx.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-venice-gw75xx-2x.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-venice-gw82xx-2x.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-mezzanine-ov5640-24mhz-alt-jumpers.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-mezzanine-ov5640-24mhz-default-jumpers.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-mezzanine-ov5640-alt-jumpers.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-mezzanine-ov5640-default-jumpers.dtbo
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-dahlia.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-dev.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-ivy.dtb
@@ -743,6 +747,11 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-mallow.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-yavia.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-zinnia.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dahlia.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev-dual-ov5640.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev-mezzanine-ov5640-24mhz-alt-jumpers.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev-mezzanine-ov5640-24mhz-default-jumpers.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev-mezzanine-ov5640-alt-jumpers.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev-mezzanine-ov5640-default-jumpers.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev-ov5640-24mhz.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev-ov5640.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev.dtb
@@ -751,6 +760,16 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-mallow.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-yavia.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-zinnia.dtb
+imx8mp-verdin-wifi-dev-dual-ov5640-dtbs := imx8mp-verdin-wifi-dev.dtb imx8m-verdin-ov5640.dtbo \
+ imx8mp-verdin-mezzanine-ov5640-alt-jumpers.dtbo
+imx8mp-verdin-wifi-dev-mezzanine-ov5640-24mhz-alt-jumpers-dtbs := imx8mp-verdin-wifi-dev.dtb \
+ imx8mp-verdin-mezzanine-ov5640-24mhz-alt-jumpers.dtbo
+imx8mp-verdin-wifi-dev-mezzanine-ov5640-24mhz-default-jumpers-dtbs := imx8mp-verdin-wifi-dev.dtb \
+ imx8mp-verdin-mezzanine-ov5640-24mhz-default-jumpers.dtbo
+imx8mp-verdin-wifi-dev-mezzanine-ov5640-alt-jumpers-dtbs := imx8mp-verdin-wifi-dev.dtb \
+ imx8mp-verdin-mezzanine-ov5640-alt-jumpers.dtbo
+imx8mp-verdin-wifi-dev-mezzanine-ov5640-default-jumpers-dtbs := imx8mp-verdin-wifi-dev.dtb \
+ imx8mp-verdin-mezzanine-ov5640-default-jumpers.dtbo
imx8mp-verdin-wifi-dev-ov5640-24mhz-dtbs := imx8mp-verdin-wifi-dev.dtb imx8m-verdin-ov5640-24mhz.dtbo
imx8mp-verdin-wifi-dev-ov5640-dtbs := imx8mp-verdin-wifi-dev.dtb imx8m-verdin-ov5640.dtbo
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640-24mhz-alt-jumpers.dtso b/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640-24mhz-alt-jumpers.dtso
new file mode 100644
index 000000000000..9579ad2f2235
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640-24mhz-alt-jumpers.dtso
@@ -0,0 +1,19 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Copyright (c) Toradex
+ *
+ * Toradex CSI Camera Module 5MP OV5640 on the Verdin iMX8M Plus Mezzanine with
+ * alternate GPIO jumper positions.
+ *
+ * https://developer.toradex.com/hardware/legacy-products/other/csi-camera-module-5mp-ov5640/
+ * https://developer.toradex.com/hardware/verdin-som-family/add-ons/verdin-imx8m-plus-mezzanine/
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "imx8mp-verdin-mezzanine-ov5640-alt-jumpers.dtso"
+
+&clk_ov5640_mezz_osc {
+ clock-frequency = <24000000>;
+};
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640-24mhz-default-jumpers.dtso b/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640-24mhz-default-jumpers.dtso
new file mode 100644
index 000000000000..2079f9ead22d
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640-24mhz-default-jumpers.dtso
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Copyright (c) Toradex
+ *
+ * Toradex CSI Camera Module 5MP OV5640 on the Verdin iMX8M Plus Mezzanine.
+ *
+ * https://developer.toradex.com/hardware/legacy-products/other/csi-camera-module-5mp-ov5640/
+ * https://developer.toradex.com/hardware/verdin-som-family/add-ons/verdin-imx8m-plus-mezzanine/
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "imx8mp-verdin-mezzanine-ov5640-default-jumpers.dtso"
+
+&clk_ov5640_mezz_osc {
+ clock-frequency = <24000000>;
+};
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640-alt-jumpers.dtso b/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640-alt-jumpers.dtso
new file mode 100644
index 000000000000..9f2372227a8d
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640-alt-jumpers.dtso
@@ -0,0 +1,38 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Copyright (c) Toradex
+ *
+ * Toradex CSI Camera Set 5MP OV5640 on the Verdin iMX8M Plus Mezzanine with
+ * alternate GPIO jumper positions.
+ * These positions support two cameras but share Verdin GPIO_2 with the Atmel
+ * MXT touchscreen.
+ *
+ * https://developer.toradex.com/hardware/accessories/cameras/csi-camera-module-5mp-ov5640-arducam
+ * https://developer.toradex.com/hardware/verdin-som-family/add-ons/verdin-imx8m-plus-mezzanine/
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "imx8mp-verdin-mezzanine-ov5640.dtsi"
+
+&{/} {
+ verdin_mezz_camera_connector: camera-connector-1 {
+ compatible = "toradex,camera-connector";
+ #gpio-cells = <2>;
+ /*
+ * CSI_2_GPIO_0_RST (pin 11) - JP5 1-2 - Verdin GPIO_1
+ * CSI_2_GPIO_1 (pin 22) - JP6 1-2 - Verdin GPIO_2
+ * CSI_2_GPIO_3 (pin 24) - JP8 1-2 - Verdin GPIO_4
+ */
+ gpio-map = <0 0 &gpio1 0 GPIO_ACTIVE_HIGH>,
+ <1 0 &gpio1 1 GPIO_ACTIVE_HIGH>,
+ <3 0 &gpio1 6 GPIO_ACTIVE_HIGH>;
+ gpio-map-mask = <0xffffffff 0x0>;
+ gpio-map-pass-thru = <0x0 0xffffffff>;
+ };
+};
+
+&clk_ov5640_mezz_osc {
+ clock-frequency = <27000000>;
+};
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640-default-jumpers.dtso b/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640-default-jumpers.dtso
new file mode 100644
index 000000000000..801beb8f48a6
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640-default-jumpers.dtso
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Copyright (c) Toradex
+ *
+ * Toradex CSI Camera Set 5MP OV5640 on the Verdin iMX8M Plus Mezzanine.
+ * The default jumper positions share GPIOs with the Verdin CSI_1 interface
+ * and do not support using both camera connectors at the same time.
+ *
+ * https://developer.toradex.com/hardware/accessories/cameras/csi-camera-module-5mp-ov5640-arducam
+ * https://developer.toradex.com/hardware/verdin-som-family/add-ons/verdin-imx8m-plus-mezzanine/
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "imx8mp-verdin-mezzanine-ov5640.dtsi"
+
+&{/} {
+ verdin_mezz_camera_connector: camera-connector-1 {
+ compatible = "toradex,camera-connector";
+ #gpio-cells = <2>;
+ /*
+ * CSI_2_GPIO_0_RST (pin 11) - JP5 2-3 - Verdin GPIO_5_CSI
+ * CSI_2_GPIO_1 (pin 22) - JP6 2-3 - Verdin GPIO_6_CSI
+ * CSI_2_GPIO_3 (pin 24) - JP8 2-3 - Verdin GPIO_8_CSI
+ */
+ gpio-map = <0 0 &gpio1 7 GPIO_ACTIVE_HIGH>,
+ <1 0 &gpio1 8 GPIO_ACTIVE_HIGH>,
+ <3 0 &gpio4 1 GPIO_ACTIVE_HIGH>;
+ gpio-map-mask = <0xffffffff 0x0>;
+ gpio-map-pass-thru = <0x0 0xffffffff>;
+ };
+};
+
+&clk_ov5640_mezz_osc {
+ clock-frequency = <27000000>;
+};
+
+&ov5640_mezz {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_gpio5>, <&pinctrl_gpio6>;
+};
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640.dtsi b/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640.dtsi
new file mode 100644
index 000000000000..3902ba62fb91
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-mezzanine-ov5640.dtsi
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Copyright (c) Toradex
+ *
+ * Common device tree include for Toradex OV5640 CSI camera on the Verdin
+ * iMX8M Plus Mezzanine.
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+ compatible = "toradex,verdin-imx8mp";
+};
+
+&{/} {
+ clk_ov5640_mezz_osc: ov5640-mezzanine-xclk {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ };
+
+ reg_verdin_mezz_csi: regulator-mezzanine-csi {
+ compatible = "regulator-fixed";
+ gpios = <&verdin_mezz_camera_connector 3 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ regulator-name = "V_CSI_MEZZ";
+ startup-delay-us = <5000>;
+ };
+};
+
+&isi_0 {
+ status = "okay";
+};
+
+/* Verdin I2C_2_DSI (Mezzanine JP3 and JP4 in position 2-3) */
+&i2c2 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ status = "okay";
+
+ ov5640_mezz: camera@3c {
+ compatible = "ovti,ov5640";
+ reg = <0x3c>;
+ clocks = <&clk_ov5640_mezz_osc>;
+ clock-names = "xclk";
+ AVDD-supply = <®_verdin_mezz_csi>;
+ DOVDD-supply = <®_verdin_mezz_csi>;
+ DVDD-supply = <®_verdin_mezz_csi>;
+ powerdown-gpios = <&verdin_mezz_camera_connector 1 GPIO_ACTIVE_HIGH>;
+ reset-gpios = <&verdin_mezz_camera_connector 0 GPIO_ACTIVE_LOW>;
+
+ port {
+ ov5640_mezz_to_mipi_csi_1: endpoint {
+ clock-lanes = <0>;
+ data-lanes = <1 2>;
+ remote-endpoint = <&mipi_csi_1_in>;
+ };
+ };
+ };
+};
+
+&mipi_csi_1 {
+ status = "okay";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ mipi_csi_1_in: endpoint {
+ data-lanes = <1 2>;
+ remote-endpoint = <&ov5640_mezz_to_mipi_csi_1>;
+ };
+ };
+ };
+};
--
2.43.0
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH v3 4/4] arm64: dts: freescale: imx8mp-verdin: Add mezzanine OV5640 overlays
2026-10-22 14:31 ` [PATCH v3 4/4] arm64: dts: freescale: imx8mp-verdin: Add mezzanine " Ernest Van Hoecke
@ 2026-10-22 21:20 ` Frank Li
2026-10-23 13:51 ` Ernest Van Hoecke
0 siblings, 1 reply; 11+ messages in thread
From: Frank Li @ 2026-10-22 21:20 UTC (permalink / raw)
To: Ernest Van Hoecke
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
Kieran Bingham, Francesco Dolcini, Dave Stevenson, devicetree,
imx, linux-arm-kernel, linux-kernel, Ernest Van Hoecke
On Thu, Oct 22, 2026 at 04:31:28PM +0200, Ernest Van Hoecke wrote:
> From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
>
> The Verdin iMX8M Plus exposes its second MIPI CSI-2 interface through the
> Verdin iMX8M Plus Mezzanine. Add overlays for using a Toradex OV5640 camera
> on this interface.
>
> The mezzanine can route the camera control signals through two jumper
> configurations. Describe each configuration as a GPIO nexus mapping so the
> camera description remains independent of the physical routing.
>
> The default positions share the native CSI_1 GPIOs and are intended for a
> single camera. The alternate positions permit simultaneous native and
> mezzanine cameras, but conflict with the Atmel MXT touchscreen GPIO.
>
> The current camera set uses a 27 MHz on-board oscillator. The legacy camera
> module uses 24 MHz, so provide variants for both.
>
> Link: https://developer.toradex.com/hardware/verdin-som-family/add-ons/verdin-imx8m-plus-mezzanine/
> Link: https://developer.toradex.com/hardware/accessories/cameras/csi-camera-module-5mp-ov5640-arducam
> Link: https://developer.toradex.com/hardware/legacy-products/other/csi-camera-module-5mp-ov5640/
> Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> ---
> arch/arm64/boot/dts/freescale/Makefile | 19 ++++++
> ...-verdin-mezzanine-ov5640-24mhz-alt-jumpers.dtso | 19 ++++++
> ...din-mezzanine-ov5640-24mhz-default-jumpers.dtso | 18 +++++
> ...imx8mp-verdin-mezzanine-ov5640-alt-jumpers.dtso | 38 +++++++++++
> ...mp-verdin-mezzanine-ov5640-default-jumpers.dtso | 42 ++++++++++++
> .../freescale/imx8mp-verdin-mezzanine-ov5640.dtsi | 78 ++++++++++++++++++++++
why not share with imx8m-verdin-ov5640.dtsi, which is almost the same.
Frank
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 4/4] arm64: dts: freescale: imx8mp-verdin: Add mezzanine OV5640 overlays
2026-10-22 21:20 ` Frank Li
@ 2026-10-23 13:51 ` Ernest Van Hoecke
2026-10-23 20:23 ` Frank Li
0 siblings, 1 reply; 11+ messages in thread
From: Ernest Van Hoecke @ 2026-10-23 13:51 UTC (permalink / raw)
To: Frank Li
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
Kieran Bingham, Francesco Dolcini, Dave Stevenson, devicetree,
imx, linux-arm-kernel, linux-kernel, Ernest Van Hoecke
On Thu, Oct 22, 2026 at 05:20:48PM -0400, Frank Li wrote:
> On Thu, Oct 22, 2026 at 04:31:28PM +0200, Ernest Van Hoecke wrote:
> > From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> >
> > The Verdin iMX8M Plus exposes its second MIPI CSI-2 interface through the
> > Verdin iMX8M Plus Mezzanine. Add overlays for using a Toradex OV5640 camera
> > on this interface.
> >
> > The mezzanine can route the camera control signals through two jumper
> > configurations. Describe each configuration as a GPIO nexus mapping so the
> > camera description remains independent of the physical routing.
> >
> > The default positions share the native CSI_1 GPIOs and are intended for a
> > single camera. The alternate positions permit simultaneous native and
> > mezzanine cameras, but conflict with the Atmel MXT touchscreen GPIO.
> >
> > The current camera set uses a 27 MHz on-board oscillator. The legacy camera
> > module uses 24 MHz, so provide variants for both.
> >
> > Link: https://developer.toradex.com/hardware/verdin-som-family/add-ons/verdin-imx8m-plus-mezzanine/
> > Link: https://developer.toradex.com/hardware/accessories/cameras/csi-camera-module-5mp-ov5640-arducam
> > Link: https://developer.toradex.com/hardware/legacy-products/other/csi-camera-module-5mp-ov5640/
> > Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> > ---
> > arch/arm64/boot/dts/freescale/Makefile | 19 ++++++
> > ...-verdin-mezzanine-ov5640-24mhz-alt-jumpers.dtso | 19 ++++++
> > ...din-mezzanine-ov5640-24mhz-default-jumpers.dtso | 18 +++++
> > ...imx8mp-verdin-mezzanine-ov5640-alt-jumpers.dtso | 38 +++++++++++
> > ...mp-verdin-mezzanine-ov5640-default-jumpers.dtso | 42 ++++++++++++
> > .../freescale/imx8mp-verdin-mezzanine-ov5640.dtsi | 78 ++++++++++++++++++++++
>
> why not share with imx8m-verdin-ov5640.dtsi, which is almost the same.
>
> Frank
Hi Frank,
Both camera modules have their own oscillator, and the native and
Mezzanine connectors have their own supply, so each overlay describes its
own clock and regulator nodes. They also use a different I2C bus, CSI
receiver and connector. Both overlays are applied together for two
cameras (imx8mp-verdin-wifi-dev-dual-ov5640), so their node names and
labels must be unique, and a single .dtsi cannot be included twice.
The connector nexus makes the GPIOs independent of the routing, but an
overlay still has to name the connector, bus and receiver it uses. One
overlay for either connector would need the target to be chosen when it
is applied, which is what the DT connector/addon work is about, so sadly
we have to wait for that to make things more generic.
What is left in common is a few constant sensor properties, so I would
like to keep the two files.
Thanks for your input and best regards,
Ernest
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 4/4] arm64: dts: freescale: imx8mp-verdin: Add mezzanine OV5640 overlays
2026-10-23 13:51 ` Ernest Van Hoecke
@ 2026-10-23 20:23 ` Frank Li
0 siblings, 0 replies; 11+ messages in thread
From: Frank Li @ 2026-10-23 20:23 UTC (permalink / raw)
To: Ernest Van Hoecke
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
Kieran Bingham, Francesco Dolcini, Dave Stevenson, devicetree,
imx, linux-arm-kernel, linux-kernel, Ernest Van Hoecke
On Fri, Oct 23, 2026 at 03:51:17PM +0200, Ernest Van Hoecke wrote:
> On Thu, Oct 22, 2026 at 05:20:48PM -0400, Frank Li wrote:
> > On Thu, Oct 22, 2026 at 04:31:28PM +0200, Ernest Van Hoecke wrote:
> > > From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> > >
> > > The Verdin iMX8M Plus exposes its second MIPI CSI-2 interface through the
> > > Verdin iMX8M Plus Mezzanine. Add overlays for using a Toradex OV5640 camera
> > > on this interface.
> > >
> > > The mezzanine can route the camera control signals through two jumper
> > > configurations. Describe each configuration as a GPIO nexus mapping so the
> > > camera description remains independent of the physical routing.
> > >
> > > The default positions share the native CSI_1 GPIOs and are intended for a
> > > single camera. The alternate positions permit simultaneous native and
> > > mezzanine cameras, but conflict with the Atmel MXT touchscreen GPIO.
> > >
> > > The current camera set uses a 27 MHz on-board oscillator. The legacy camera
> > > module uses 24 MHz, so provide variants for both.
> > >
> > > Link: https://developer.toradex.com/hardware/verdin-som-family/add-ons/verdin-imx8m-plus-mezzanine/
> > > Link: https://developer.toradex.com/hardware/accessories/cameras/csi-camera-module-5mp-ov5640-arducam
> > > Link: https://developer.toradex.com/hardware/legacy-products/other/csi-camera-module-5mp-ov5640/
> > > Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> > > ---
> > > arch/arm64/boot/dts/freescale/Makefile | 19 ++++++
> > > ...-verdin-mezzanine-ov5640-24mhz-alt-jumpers.dtso | 19 ++++++
> > > ...din-mezzanine-ov5640-24mhz-default-jumpers.dtso | 18 +++++
> > > ...imx8mp-verdin-mezzanine-ov5640-alt-jumpers.dtso | 38 +++++++++++
> > > ...mp-verdin-mezzanine-ov5640-default-jumpers.dtso | 42 ++++++++++++
> > > .../freescale/imx8mp-verdin-mezzanine-ov5640.dtsi | 78 ++++++++++++++++++++++
> >
> > why not share with imx8m-verdin-ov5640.dtsi, which is almost the same.
> >
> > Frank
>
> Hi Frank,
>
> Both camera modules have their own oscillator, and the native and
> Mezzanine connectors have their own supply, so each overlay describes its
> own clock and regulator nodes. They also use a different I2C bus, CSI
> receiver and connector. Both overlays are applied together for two
> cameras (imx8mp-verdin-wifi-dev-dual-ov5640),
Okay, I see share one imx8m-verdin-ov5640.dtso
> so their node names and
> labels must be unique, and a single .dtsi cannot be included twice.
mezzanine actually connect by another connectors ? so it need new one files
because current nexus node's limitation.
Can you make imx8mp-verdin-mezzanine-ov5640.dtsi also standardize, like
use unified camera_i2c_2, camera_connector2, compre to imx8m-verdin-ov5640.dtso
And avoid dtso include dtso file. Now perfer only include dtsi file.
Frank
>
> The connector nexus makes the GPIOs independent of the routing, but an
> overlay still has to name the connector, bus and receiver it uses. One
> overlay for either connector would need the target to be chosen when it
> is applied, which is what the DT connector/addon work is about, so sadly
> we have to wait for that to make things more generic.
>
> What is left in common is a few constant sensor properties, so I would
> like to keep the two files.
>
> Thanks for your input and best regards,
> Ernest
>
^ permalink raw reply [flat|nested] 11+ messages in thread