* [PATCH 0/6] arm64: dts: freescale: Add Verdin iMX8M OV5640 and Verdin iMX8MP M7 support
@ 2026-09-10 15:37 Ernest Van Hoecke
2026-09-10 15:37 ` [PATCH 1/6] arm64: dts: freescale: imx8mp-verdin: Add Cortex-M7 remoteproc Ernest Van Hoecke
` (5 more replies)
0 siblings, 6 replies; 13+ messages in thread
From: Ernest Van Hoecke @ 2026-09-10 15:37 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Kieran Bingham, Francesco Dolcini, devicetree, imx,
linux-arm-kernel, linux-kernel, Ernest Van Hoecke
Describe the Cortex-M7 remote processor and its RPMsg memory regions for
Verdin iMX8M Plus, add shared OV5640 camera overlays for Verdin iMX8M
Mini and Verdin iMX8M Plus, and support a second camera through the
Verdin iMX8M Plus Mezzanine.
It applies on top of the recently submitted Verdin iMX8M Plus overlay
series:
https://lore.kernel.org/all/20260907-verdin-imx8mp-non-camera-overlays-ready-v1-0-ca0c63c2994f@toradex.com/
Add the Verdin board description and RPMsg reserved-memory regions,
following the Verdin iMX8M Mini description. A small overlay optionally
reserves Verdin UART_4 for Cortex-M7 firmware.
The camera patches are the follow-up promised when the OV5640 patches
were removed from v2 of the Verdin iMX8M Mini overlay series:
https://lore.kernel.org/r/20260713-v1-verdin-imx8mm-dtbos-v1-0-4acd63db4504@toradex.com
Verdin iMX8M Mini and Verdin iMX8M Plus can use the same 24-pin camera
connector on the Verdin Development Board, Dahlia and Mallow carrier
boards. The connector's sideband signals are routed to different GPIO
controllers, however, and the two SoCs use different capture pipelines.
Describing these details directly in an accessory overlay would require
a separate camera overlay for each SoM and carrier combination.
Following feedback on the Verdin iMX8M Mini series, introduce a binding
for the connector's sideband GPIO nexus. Add connector mappings to the
carrier descriptions and stable labels for the SoM-specific CSI media
nodes. This allows one pair of OV5640 overlays to be shared by both SoMs
and all three carrier boards.
The binding intentionally covers only the connector's GPIO signals.
MIPI CSI-2 endpoints, I2C, clocks and supplies continue to use their
existing bindings and are connected through stable labels in the Verdin
device trees.
The unsuffixed camera overlay describes the current camera module with
its 27 MHz oscillator. A separate overlay supports the legacy module
with its 24 MHz oscillator.
The Verdin iMX8M Plus Mezzanine exposes the SoC's second MIPI CSI-2
interface through another 24-pin camera connector. Its camera control
signals can be routed through either the default or alternate GPIO
jumper positions. Reuse the connector nexus for both configurations so
that they share one camera and media-pipeline description. Provide 27
MHz and 24 MHz variants for each jumper configuration.
The default GPIO routing is intended for a single camera because it
shares control signals with the native CSI_1 connector. The alternate
routing permits native and mezzanine cameras to be used together, but
conflicts with the Atmel MXT touchscreen GPIO.
The shared 27 MHz overlay was run-tested on Verdin iMX8M Mini and Verdin
iMX8M Plus. Both shared camera overlays were compiled, applied and
schema-validated with the WiFi and non-WiFi variants of all three
supported carrier boards on both SoCs. All mezzanine overlays were also
tested both standalone and in the dual camera use case on the iMX8MP.
When fw_devlink is enforcing probe ordering, camera probing depends on
the GPIO nexus support from [1]. Without it, fw_devlink can treat the
connector nexus itself as the supplier of the camera regulator instead
of following gpio-map to the underlying GPIO controller. This can leave
the regulator and camera waiting, for example:
i2c 2-003c: deferred probe pending: i2c: supplier regulator-camera not ready
[1] https://lore.kernel.org/all/20260910-fw-devlink-nexus-ready-v2-0-17ac82dbe226@toradex.com/
Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
---
Ernest Van Hoecke (6):
arm64: dts: freescale: imx8mp-verdin: Add Cortex-M7 remoteproc
arm64: dts: freescale: imx8mp-verdin: Add Cortex-M7 UART_4 overlay
dt-bindings: connector: Add Toradex camera connector
arm64: dts: freescale: imx8m{m,p}-verdin: Add camera connector nexus
arm64: dts: freescale: imx8m{m,p}-verdin: Add shared OV5640 overlays
arm64: dts: freescale: imx8mp-verdin: Add mezzanine OV5640 overlays
.../connector/toradex,camera-connector.yaml | 86 ++++++++++++++++++++++
arch/arm64/boot/dts/freescale/Makefile | 32 ++++++++
.../dts/freescale/imx8m-verdin-ov5640-24mhz.dtso | 17 +++++
.../boot/dts/freescale/imx8m-verdin-ov5640.dtsi | 78 ++++++++++++++++++++
.../boot/dts/freescale/imx8m-verdin-ov5640.dtso | 18 +++++
.../boot/dts/freescale/imx8mm-verdin-dahlia.dtsi | 17 +++++
.../boot/dts/freescale/imx8mm-verdin-dev.dtsi | 17 +++++
.../boot/dts/freescale/imx8mm-verdin-mallow.dtsi | 17 +++++
arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi | 8 +-
.../boot/dts/freescale/imx8mp-verdin-dahlia.dtsi | 17 +++++
.../boot/dts/freescale/imx8mp-verdin-dev.dtsi | 17 +++++
.../boot/dts/freescale/imx8mp-verdin-mallow.dtsi | 17 +++++
...-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 ++++++++++++++++++++
.../dts/freescale/imx8mp-verdin-uart4-mcu.dtso | 14 ++++
arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi | 40 +++++++++-
19 files changed, 588 insertions(+), 2 deletions(-)
---
base-commit: b0d182093ef1e0693db6e40f576c6b6f5a52aead
change-id: 20260908-verdin-imx8mp-hmp-camera-ready-60d68a2f0242
Best regards,
--
Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/6] arm64: dts: freescale: imx8mp-verdin: Add Cortex-M7 remoteproc
2026-09-10 15:37 [PATCH 0/6] arm64: dts: freescale: Add Verdin iMX8M OV5640 and Verdin iMX8MP M7 support Ernest Van Hoecke
@ 2026-09-10 15:37 ` Ernest Van Hoecke
2026-09-10 15:37 ` [PATCH 2/6] arm64: dts: freescale: imx8mp-verdin: Add Cortex-M7 UART_4 overlay Ernest Van Hoecke
` (4 subsequent siblings)
5 siblings, 0 replies; 13+ messages in thread
From: Ernest Van Hoecke @ 2026-09-10 15:37 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Kieran Bingham, Francesco Dolcini, devicetree, imx,
linux-arm-kernel, linux-kernel, Ernest Van Hoecke
From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
Describe the Cortex-M7 remote processor available on the Verdin iMX8M
Plus SoM.
Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
---
arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi | 33 ++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi b/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
index 9fee2cf9ef54..45a4713c260f 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
@@ -77,6 +77,18 @@ key-wakeup {
};
};
+ imx8mp-cm7 {
+ compatible = "fsl,imx8mp-cm7";
+ clocks = <&clk IMX8MP_CLK_M7_DIV>;
+ mbox-names = "tx", "rx", "rxdb";
+ mboxes = <&mu 0 1
+ &mu 1 1
+ &mu 3 1>;
+ memory-region = <&vdev0buffer>, <&vdev0vring0>, <&vdev0vring1>,
+ <&rsc_table>;
+ syscon = <&src>;
+ };
+
sound_hdmi: sound-hdmi {
compatible = "fsl,imx-audio-hdmi";
model = "audio-hdmi";
@@ -185,6 +197,27 @@ reserved-memory {
/* Use the kernel configuration settings instead */
/delete-node/ linux,cma;
+
+ vdev0vring0: vdev0vring0@55000000 {
+ reg = <0 0x55000000 0 0x8000>;
+ no-map;
+ };
+
+ vdev0vring1: vdev0vring1@55008000 {
+ reg = <0 0x55008000 0 0x8000>;
+ no-map;
+ };
+
+ rsc_table: rsc-table@550ff000 {
+ reg = <0 0x550ff000 0 0x1000>;
+ no-map;
+ };
+
+ vdev0buffer: vdev0buffer@55400000 {
+ compatible = "shared-dma-pool";
+ reg = <0 0x55400000 0 0x100000>;
+ no-map;
+ };
};
};
--
2.43.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 2/6] arm64: dts: freescale: imx8mp-verdin: Add Cortex-M7 UART_4 overlay
2026-09-10 15:37 [PATCH 0/6] arm64: dts: freescale: Add Verdin iMX8M OV5640 and Verdin iMX8MP M7 support Ernest Van Hoecke
2026-09-10 15:37 ` [PATCH 1/6] arm64: dts: freescale: imx8mp-verdin: Add Cortex-M7 remoteproc Ernest Van Hoecke
@ 2026-09-10 15:37 ` Ernest Van Hoecke
2026-09-10 15:37 ` [PATCH 3/6] dt-bindings: connector: Add Toradex camera connector Ernest Van Hoecke
` (3 subsequent siblings)
5 siblings, 0 replies; 13+ messages in thread
From: Ernest Van Hoecke @ 2026-09-10 15:37 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Kieran Bingham, Francesco Dolcini, devicetree, imx,
linux-arm-kernel, linux-kernel, Ernest Van Hoecke
From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
Verdin UART_4 can be assigned to Cortex-M7 firmware. Add an overlay
that marks the UART as reserved so Linux does not claim the port.
The overlay is also combined with the Verdin iMX8M Plus Development
Board device tree to provide a ready-to-use DTB for the non-WiFi SoM
variant. UART_4 carries Bluetooth on WiFi SoMs.
Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
---
arch/arm64/boot/dts/freescale/Makefile | 3 +++
arch/arm64/boot/dts/freescale/imx8mp-verdin-uart4-mcu.dtso | 14 ++++++++++++++
2 files changed, 17 insertions(+)
diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
index ca4fec7c1038..8b152903b4b1 100644
--- a/arch/arm64/boot/dts/freescale/Makefile
+++ b/arch/arm64/boot/dts/freescale/Makefile
@@ -734,6 +734,7 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-dahlia-dsi-to-hdmi.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-dahlia-panel-cap-touch-10inch-dsi.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-dahlia.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-dev-dsi-to-hdmi.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-dev-uart4-mcu.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-dev.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-ivy.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-mallow.dtb
@@ -742,6 +743,7 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-yavia.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-zinnia.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-panel-cap-touch-10inch-dsi.dtbo
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-panel-cap-touch-7inch-dsi.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-uart4-mcu.dtbo
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dahlia-dsi-to-hdmi.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dahlia-panel-cap-touch-10inch-dsi.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dahlia.dtb
@@ -759,6 +761,7 @@ imx8mp-verdin-nonwifi-dahlia-dsi-to-hdmi-dtbs := imx8mp-verdin-nonwifi-dahlia.dt
imx8mp-verdin-nonwifi-dahlia-panel-cap-touch-10inch-dsi-dtbs := imx8mp-verdin-nonwifi-dahlia.dtb \
imx8mp-verdin-panel-cap-touch-10inch-dsi.dtbo
imx8mp-verdin-nonwifi-dev-dsi-to-hdmi-dtbs := imx8mp-verdin-nonwifi-dev.dtb imx8mp-verdin-dsi-to-hdmi.dtbo
+imx8mp-verdin-nonwifi-dev-uart4-mcu-dtbs := imx8mp-verdin-nonwifi-dev.dtb imx8mp-verdin-uart4-mcu.dtbo
imx8mp-verdin-nonwifi-yavia-dsi-to-hdmi-dtbs := imx8mp-verdin-nonwifi-yavia.dtb imx8mp-verdin-dsi-to-hdmi.dtbo
imx8mp-verdin-wifi-dahlia-dsi-to-hdmi-dtbs := imx8mp-verdin-wifi-dahlia.dtb imx8mp-verdin-dsi-to-hdmi.dtbo
imx8mp-verdin-wifi-dahlia-panel-cap-touch-10inch-dsi-dtbs := imx8mp-verdin-wifi-dahlia.dtb \
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-uart4-mcu.dtso b/arch/arm64/boot/dts/freescale/imx8mp-verdin-uart4-mcu.dtso
new file mode 100644
index 000000000000..74d90b39faec
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-uart4-mcu.dtso
@@ -0,0 +1,14 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Copyright (c) Toradex
+ *
+ * Verdin iMX8M Plus UART_4 for Cortex-M7
+ */
+
+/dts-v1/;
+/plugin/;
+
+/* Verdin UART_4 */
+&uart4 {
+ status = "reserved";
+};
--
2.43.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 3/6] dt-bindings: connector: Add Toradex camera connector
2026-09-10 15:37 [PATCH 0/6] arm64: dts: freescale: Add Verdin iMX8M OV5640 and Verdin iMX8MP M7 support Ernest Van Hoecke
2026-09-10 15:37 ` [PATCH 1/6] arm64: dts: freescale: imx8mp-verdin: Add Cortex-M7 remoteproc Ernest Van Hoecke
2026-09-10 15:37 ` [PATCH 2/6] arm64: dts: freescale: imx8mp-verdin: Add Cortex-M7 UART_4 overlay Ernest Van Hoecke
@ 2026-09-10 15:37 ` Ernest Van Hoecke
2026-09-10 16:26 ` Frank Li
2026-09-10 15:38 ` [PATCH 4/6] arm64: dts: freescale: imx8m{m,p}-verdin: Add camera connector nexus Ernest Van Hoecke
` (2 subsequent siblings)
5 siblings, 1 reply; 13+ messages in thread
From: Ernest Van Hoecke @ 2026-09-10 15:37 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Kieran Bingham, Francesco Dolcini, 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.
Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
---
.../connector/toradex,camera-connector.yaml | 86 ++++++++++++++++++++++
1 file changed, 86 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..06e6836e1aa6
--- /dev/null
+++ b/Documentation/devicetree/bindings/connector/toradex,camera-connector.yaml
@@ -0,0 +1,86 @@
+# 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 boards provide 24-pin camera connectors 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>;
+ };
+
+ gpio1: gpio-controller {
+ #gpio-cells = <2>;
+ gpio-controller;
+ };
+
+...
--
2.43.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 4/6] arm64: dts: freescale: imx8m{m,p}-verdin: Add camera connector nexus
2026-09-10 15:37 [PATCH 0/6] arm64: dts: freescale: Add Verdin iMX8M OV5640 and Verdin iMX8MP M7 support Ernest Van Hoecke
` (2 preceding siblings ...)
2026-09-10 15:37 ` [PATCH 3/6] dt-bindings: connector: Add Toradex camera connector Ernest Van Hoecke
@ 2026-09-10 15:38 ` Ernest Van Hoecke
2026-09-10 16:31 ` Frank Li
2026-09-10 15:38 ` [PATCH 5/6] arm64: dts: freescale: imx8m{m,p}-verdin: Add shared OV5640 overlays Ernest Van Hoecke
2026-09-10 15:38 ` [PATCH 6/6] arm64: dts: freescale: imx8mp-verdin: Add mezzanine " Ernest Van Hoecke
5 siblings, 1 reply; 13+ messages in thread
From: Ernest Van Hoecke @ 2026-09-10 15:38 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Kieran Bingham, Francesco Dolcini, 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 ac450fc6cbfb..5c72b279d506 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 45a4713c260f..53499289cf61 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
@@ -719,7 +719,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>;
@@ -829,6 +829,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] 13+ messages in thread
* [PATCH 5/6] arm64: dts: freescale: imx8m{m,p}-verdin: Add shared OV5640 overlays
2026-09-10 15:37 [PATCH 0/6] arm64: dts: freescale: Add Verdin iMX8M OV5640 and Verdin iMX8MP M7 support Ernest Van Hoecke
` (3 preceding siblings ...)
2026-09-10 15:38 ` [PATCH 4/6] arm64: dts: freescale: imx8m{m,p}-verdin: Add camera connector nexus Ernest Van Hoecke
@ 2026-09-10 15:38 ` Ernest Van Hoecke
2026-09-10 15:38 ` [PATCH 6/6] arm64: dts: freescale: imx8mp-verdin: Add mezzanine " Ernest Van Hoecke
5 siblings, 0 replies; 13+ messages in thread
From: Ernest Van Hoecke @ 2026-09-10 15:38 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Kieran Bingham, Francesco Dolcini, 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 | 10 +++
.../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, 123 insertions(+)
diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
index 8b152903b4b1..06d41b9faa79 100644
--- a/arch/arm64/boot/dts/freescale/Makefile
+++ b/arch/arm64/boot/dts/freescale/Makefile
@@ -118,6 +118,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 := \
@@ -273,6 +275,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
@@ -294,6 +298,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
@@ -749,6 +755,8 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dahlia-panel-cap-touch-10inch-dsi.d
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dahlia.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev-dsi-to-hdmi.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev-nau8822-btl.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-panel-cap-touch-7inch-dsi.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-ivy.dtb
@@ -768,6 +776,8 @@ imx8mp-verdin-wifi-dahlia-panel-cap-touch-10inch-dsi-dtbs := imx8mp-verdin-wifi-
imx8mp-verdin-panel-cap-touch-10inch-dsi.dtbo
imx8mp-verdin-wifi-dev-dsi-to-hdmi-dtbs := imx8mp-verdin-wifi-dev.dtb imx8mp-verdin-dsi-to-hdmi.dtbo
imx8mp-verdin-wifi-dev-nau8822-btl-dtbs := imx8mp-verdin-wifi-dev.dtb imx8mp-verdin-dev-nau8822-btl.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
imx8mp-verdin-wifi-dev-panel-cap-touch-7inch-dsi-dtbs := imx8mp-verdin-wifi-dev.dtb \
imx8mp-verdin-panel-cap-touch-7inch-dsi.dtbo
imx8mp-verdin-wifi-yavia-dsi-to-hdmi-dtbs := imx8mp-verdin-wifi-yavia.dtb imx8mp-verdin-dsi-to-hdmi.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] 13+ messages in thread
* [PATCH 6/6] arm64: dts: freescale: imx8mp-verdin: Add mezzanine OV5640 overlays
2026-09-10 15:37 [PATCH 0/6] arm64: dts: freescale: Add Verdin iMX8M OV5640 and Verdin iMX8MP M7 support Ernest Van Hoecke
` (4 preceding siblings ...)
2026-09-10 15:38 ` [PATCH 5/6] arm64: dts: freescale: imx8m{m,p}-verdin: Add shared OV5640 overlays Ernest Van Hoecke
@ 2026-09-10 15:38 ` Ernest Van Hoecke
5 siblings, 0 replies; 13+ messages in thread
From: Ernest Van Hoecke @ 2026-09-10 15:38 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Kieran Bingham, Francesco Dolcini, 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 06d41b9faa79..8dcb5d9fc74f 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-gw75xx-2x.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-venice-gw82xx-2x.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-dev-nau8822-btl.dtbo
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-dsi-to-hdmi.dtbo
+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-dsi-to-hdmi.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-dahlia-panel-cap-touch-10inch-dsi.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-nonwifi-dahlia.dtb
@@ -754,6 +758,11 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dahlia-dsi-to-hdmi.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dahlia-panel-cap-touch-10inch-dsi.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dahlia.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev-dsi-to-hdmi.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-nau8822-btl.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev-ov5640-24mhz.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-verdin-wifi-dev-ov5640.dtb
@@ -775,6 +784,16 @@ imx8mp-verdin-wifi-dahlia-dsi-to-hdmi-dtbs := imx8mp-verdin-wifi-dahlia.dtb imx8
imx8mp-verdin-wifi-dahlia-panel-cap-touch-10inch-dsi-dtbs := imx8mp-verdin-wifi-dahlia.dtb \
imx8mp-verdin-panel-cap-touch-10inch-dsi.dtbo
imx8mp-verdin-wifi-dev-dsi-to-hdmi-dtbs := imx8mp-verdin-wifi-dev.dtb imx8mp-verdin-dsi-to-hdmi.dtbo
+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-nau8822-btl-dtbs := imx8mp-verdin-wifi-dev.dtb imx8mp-verdin-dev-nau8822-btl.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] 13+ messages in thread
* Re: [PATCH 3/6] dt-bindings: connector: Add Toradex camera connector
2026-09-10 15:37 ` [PATCH 3/6] dt-bindings: connector: Add Toradex camera connector Ernest Van Hoecke
@ 2026-09-10 16:26 ` Frank Li
2026-09-10 16:39 ` Ernest Van Hoecke
0 siblings, 1 reply; 13+ messages in thread
From: Frank Li @ 2026-09-10 16:26 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, devicetree, imx,
linux-arm-kernel, linux-kernel, Ernest Van Hoecke
On Thu, Sep 10, 2026 at 05:37:59PM +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.
>
> Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> ---
> .../connector/toradex,camera-connector.yaml | 86 ++++++++++++++++++++++
> 1 file changed, 86 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..06e6836e1aa6
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/connector/toradex,camera-connector.yaml
> @@ -0,0 +1,86 @@
> +# 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 boards provide 24-pin camera connectors 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
Name is too generally, suggest use board name, we got similar comments at
https://lore.kernel.org/imx/20260629074734.3643227-2-chancel.liu@oss.nxp.com/
> +
> + "#gpio-cells":
> + const: 2
> +
> + gpio-map:
> + minItems: 1
> + maxItems: 4
> +
> + gpio-map-mask:
> + items:
> + - const: 0xffffffff
are you sure need full 32bit, only 4 pin, maybe 0xf should enough?
> + - const: 0
> +
> + gpio-map-pass-thru:
> + items:
> + - const: 0
> + - const: 0xffffffff
> +
missed
gpio-controller: true
> +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>;
> + };
> +
> + gpio1: gpio-controller {
> + #gpio-cells = <2>;
> + gpio-controller;
> + };
Need't gpio-controller.
Frank
> +
> +...
>
> --
> 2.43.0
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 4/6] arm64: dts: freescale: imx8m{m,p}-verdin: Add camera connector nexus
2026-09-10 15:38 ` [PATCH 4/6] arm64: dts: freescale: imx8m{m,p}-verdin: Add camera connector nexus Ernest Van Hoecke
@ 2026-09-10 16:31 ` Frank Li
0 siblings, 0 replies; 13+ messages in thread
From: Frank Li @ 2026-09-10 16:31 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, devicetree, imx,
linux-arm-kernel, linux-kernel, Ernest Van Hoecke
On Thu, Sep 10, 2026 at 05:38:00PM +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>
> ---
Nice, thank for your efforts.
Frank
> 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 ac450fc6cbfb..5c72b279d506 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 45a4713c260f..53499289cf61 100644
> --- a/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
> +++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
> @@ -719,7 +719,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>;
> @@ -829,6 +829,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] 13+ messages in thread
* Re: [PATCH 3/6] dt-bindings: connector: Add Toradex camera connector
2026-09-10 16:26 ` Frank Li
@ 2026-09-10 16:39 ` Ernest Van Hoecke
2026-09-10 17:01 ` Frank Li
0 siblings, 1 reply; 13+ messages in thread
From: Ernest Van Hoecke @ 2026-09-10 16:39 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, devicetree, imx,
linux-arm-kernel, linux-kernel, Ernest Van Hoecke
Hi Frank,
Thanks for reviewing this so quickly.
On Thu, Sep 10, 2026 at 11:26:22AM -0500, Frank Li wrote:
> On Thu, Sep 10, 2026 at 05:37:59PM +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.
> >
> > Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> > ---
> > .../connector/toradex,camera-connector.yaml | 86 ++++++++++++++++++++++
> > 1 file changed, 86 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..06e6836e1aa6
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/connector/toradex,camera-connector.yaml
> > @@ -0,0 +1,86 @@
> > +# 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 boards provide 24-pin camera connectors 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
>
> Name is too generally, suggest use board name, we got similar comments at
>
> https://lore.kernel.org/imx/20260629074734.3643227-2-chancel.liu@oss.nxp.com/
I saw that and it made me reconsider this name.
However, I believe that in our case it is specific enough. It is really
the same on all our carrier boards, and Toradex specific. It's also only
for cameras, which is more defined than just "io". Curious to see if
others agree or if we should come up with a name for this.
> > +
> > + "#gpio-cells":
> > + const: 2
> > +
> > + gpio-map:
> > + minItems: 1
> > + maxItems: 4
> > +
> > + gpio-map-mask:
> > + items:
> > + - const: 0xffffffff
>
> are you sure need full 32bit, only 4 pin, maybe 0xf should enough?
>
Indeed we could reduce the size of the mask, but I don't really see the
value in it. Isn't it good that a user can pass through the full GPIO?
> > + - const: 0
> > +
> > + gpio-map-pass-thru:
> > + items:
> > + - const: 0
> > + - const: 0xffffffff
> > +
>
> missed
> gpio-controller: true
>
This is one thing I didn't fully understand about the GPIO nexus
concept, why would we need this gpio-controller flag? Isn't the gpio
controller behind the nexus? The nexus just maps onto it. The actual
controller would be on the SoC or an expander.
> > +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>;
> > + };
> > +
> > + gpio1: gpio-controller {
> > + #gpio-cells = <2>;
> > + gpio-controller;
> > + };
>
> Need't gpio-controller.
>
> Frank
>
This ties in to my same confusion above, could you explain why or point
me to a relevant example/docs?
Thanks and kind regards,
Ernest
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/6] dt-bindings: connector: Add Toradex camera connector
2026-09-10 16:39 ` Ernest Van Hoecke
@ 2026-09-10 17:01 ` Frank Li
2026-09-10 17:12 ` Francesco Dolcini
0 siblings, 1 reply; 13+ messages in thread
From: Frank Li @ 2026-09-10 17:01 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, devicetree, imx,
linux-arm-kernel, linux-kernel, Ernest Van Hoecke
On Thu, Sep 10, 2026 at 06:39:30PM +0200, Ernest Van Hoecke wrote:
> Hi Frank,
>
> Thanks for reviewing this so quickly.
>
> On Thu, Sep 10, 2026 at 11:26:22AM -0500, Frank Li wrote:
> > On Thu, Sep 10, 2026 at 05:37:59PM +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.
> > >
> > > Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> > > ---
> > > .../connector/toradex,camera-connector.yaml | 86 ++++++++++++++++++++++
> > > 1 file changed, 86 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..06e6836e1aa6
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/connector/toradex,camera-connector.yaml
> > > @@ -0,0 +1,86 @@
> > > +# 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 boards provide 24-pin camera connectors 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
> >
> > Name is too generally, suggest use board name, we got similar comments at
> >
> > https://lore.kernel.org/imx/20260629074734.3643227-2-chancel.liu@oss.nxp.com/
>
> I saw that and it made me reconsider this name.
>
> However, I believe that in our case it is specific enough. It is really
> the same on all our carrier boards, and Toradex specific. It's also only
> for cameras, which is more defined than just "io". Curious to see if
> others agree or if we should come up with a name for this.
If some days later, you update hardware connector to 30pin from 24pins.
>
> > > +
> > > + "#gpio-cells":
> > > + const: 2
> > > +
> > > + gpio-map:
> > > + minItems: 1
> > > + maxItems: 4
> > > +
> > > + gpio-map-mask:
> > > + items:
> > > + - const: 0xffffffff
> >
> > are you sure need full 32bit, only 4 pin, maybe 0xf should enough?
> >
>
> Indeed we could reduce the size of the mask, but I don't really see the
> value in it. Isn't it good that a user can pass through the full GPIO?
it works, I remember it control input index's width.
<0 0 &gpio1 0 GPIO_ACTIVE_HIGH>
^
You can wait for dt team's comments for this.
>
> > > + - const: 0
> > > +
> > > + gpio-map-pass-thru:
> > > + items:
> > > + - const: 0
> > > + - const: 0xffffffff
> > > +
> >
> > missed
> > gpio-controller: true
> >
>
> This is one thing I didn't fully understand about the GPIO nexus
> concept, why would we need this gpio-controller flag? Isn't the gpio
> controller behind the nexus? The nexus just maps onto it. The actual
> controller would be on the SoC or an expander.
Yes, I remember "#gpio-cells" depend on "gpio-controller", does
pass dt_binding_check?
>
> > > +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>;
> > > + };
> > > +
> > > + gpio1: gpio-controller {
> > > + #gpio-cells = <2>;
> > > + gpio-controller;
> > > + };
> >
> > Need't gpio-controller.
> >
> > Frank
> >
>
> This ties in to my same confusion above, could you explain why or point
> me to a relevant example/docs?
My means needn't whole gpio-controller{} block, like &its, needn't add
node of interrupt controllers.
Example should not contain unrelated device
nodes, e.g. consumer nodes in a provider binding, other nodes referenced by
phandles or node labels which are not directly referenced in the example
itself. Phandles in the example do not have to be resolvable.
Frank
>
> Thanks and kind regards,
> Ernest
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/6] dt-bindings: connector: Add Toradex camera connector
2026-09-10 17:01 ` Frank Li
@ 2026-09-10 17:12 ` Francesco Dolcini
2026-09-10 18:38 ` Frank Li
0 siblings, 1 reply; 13+ messages in thread
From: Francesco Dolcini @ 2026-09-10 17:12 UTC (permalink / raw)
To: Frank Li
Cc: Ernest Van Hoecke, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Frank Li, Sascha Hauer, Pengutronix Kernel Team,
Fabio Estevam, Kieran Bingham, devicetree, imx, linux-arm-kernel,
linux-kernel, Ernest Van Hoecke
On Thu, Sep 10, 2026 at 12:01:51PM -0500, Frank Li wrote:
> On Thu, Sep 10, 2026 at 06:39:30PM +0200, Ernest Van Hoecke wrote:
> > Hi Frank,
> >
> > Thanks for reviewing this so quickly.
> >
> > On Thu, Sep 10, 2026 at 11:26:22AM -0500, Frank Li wrote:
> > > On Thu, Sep 10, 2026 at 05:37:59PM +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.
> > > >
> > > > Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> > > > ---
> > > > .../connector/toradex,camera-connector.yaml | 86 ++++++++++++++++++++++
> > > > 1 file changed, 86 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..06e6836e1aa6
> > > > --- /dev/null
> > > > +++ b/Documentation/devicetree/bindings/connector/toradex,camera-connector.yaml
> > > > @@ -0,0 +1,86 @@
> > > > +# 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 boards provide 24-pin camera connectors 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
> > >
> > > Name is too generally, suggest use board name, we got similar comments at
> > >
> > > https://lore.kernel.org/imx/20260629074734.3643227-2-chancel.liu@oss.nxp.com/
> >
> > I saw that and it made me reconsider this name.
> >
> > However, I believe that in our case it is specific enough. It is really
> > the same on all our carrier boards, and Toradex specific. It's also only
> > for cameras, which is more defined than just "io". Curious to see if
> > others agree or if we should come up with a name for this.
>
> If some days later, you update hardware connector to 30pin from 24pins.
That connector is there since years, not days.
We have multiple cameras, designed to mate with it.
If tomorrow we will define a new camera connector (that is absolutely
possible), the new connector will get its name, maybe
toradex,camera-connector-v2, or toradex,camera-connector-22pin or
whatever that connector would be named, not just in the DT, but also as
a product and on the actual HW.
Francesco
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/6] dt-bindings: connector: Add Toradex camera connector
2026-09-10 17:12 ` Francesco Dolcini
@ 2026-09-10 18:38 ` Frank Li
0 siblings, 0 replies; 13+ messages in thread
From: Frank Li @ 2026-09-10 18:38 UTC (permalink / raw)
To: Francesco Dolcini
Cc: Ernest Van Hoecke, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Frank Li, Sascha Hauer, Pengutronix Kernel Team,
Fabio Estevam, Kieran Bingham, devicetree, imx, linux-arm-kernel,
linux-kernel, Ernest Van Hoecke
On Thu, Sep 10, 2026 at 07:12:05PM +0200, Francesco Dolcini wrote:
> On Thu, Sep 10, 2026 at 12:01:51PM -0500, Frank Li wrote:
> > On Thu, Sep 10, 2026 at 06:39:30PM +0200, Ernest Van Hoecke wrote:
> > > Hi Frank,
> > >
> > > Thanks for reviewing this so quickly.
> > >
> > > On Thu, Sep 10, 2026 at 11:26:22AM -0500, Frank Li wrote:
> > > > On Thu, Sep 10, 2026 at 05:37:59PM +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.
> > > > >
> > > > > Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> > > > > ---
> > > > > .../connector/toradex,camera-connector.yaml | 86 ++++++++++++++++++++++
> > > > > 1 file changed, 86 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..06e6836e1aa6
> > > > > --- /dev/null
> > > > > +++ b/Documentation/devicetree/bindings/connector/toradex,camera-connector.yaml
> > > > > @@ -0,0 +1,86 @@
> > > > > +# 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 boards provide 24-pin camera connectors 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
> > > >
> > > > Name is too generally, suggest use board name, we got similar comments at
> > > >
> > > > https://lore.kernel.org/imx/20260629074734.3643227-2-chancel.liu@oss.nxp.com/
> > >
> > > I saw that and it made me reconsider this name.
> > >
> > > However, I believe that in our case it is specific enough. It is really
> > > the same on all our carrier boards, and Toradex specific. It's also only
> > > for cameras, which is more defined than just "io". Curious to see if
> > > others agree or if we should come up with a name for this.
> >
> > If some days later, you update hardware connector to 30pin from 24pins.
>
> That connector is there since years, not days.
>
> We have multiple cameras, designed to mate with it.
>
> If tomorrow we will define a new camera connector (that is absolutely
> possible), the new connector will get its name, maybe
> toradex,camera-connector-v2, or toradex,camera-connector-22pin or
> whatever that connector would be named, not just in the DT, but also as
> a product and on the actual HW.
You can wait for DT team to comments this.
Frank
>
>
> Francesco
>
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2026-09-10 18:38 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-10 15:37 [PATCH 0/6] arm64: dts: freescale: Add Verdin iMX8M OV5640 and Verdin iMX8MP M7 support Ernest Van Hoecke
2026-09-10 15:37 ` [PATCH 1/6] arm64: dts: freescale: imx8mp-verdin: Add Cortex-M7 remoteproc Ernest Van Hoecke
2026-09-10 15:37 ` [PATCH 2/6] arm64: dts: freescale: imx8mp-verdin: Add Cortex-M7 UART_4 overlay Ernest Van Hoecke
2026-09-10 15:37 ` [PATCH 3/6] dt-bindings: connector: Add Toradex camera connector Ernest Van Hoecke
2026-09-10 16:26 ` Frank Li
2026-09-10 16:39 ` Ernest Van Hoecke
2026-09-10 17:01 ` Frank Li
2026-09-10 17:12 ` Francesco Dolcini
2026-09-10 18:38 ` Frank Li
2026-09-10 15:38 ` [PATCH 4/6] arm64: dts: freescale: imx8m{m,p}-verdin: Add camera connector nexus Ernest Van Hoecke
2026-09-10 16:31 ` Frank Li
2026-09-10 15:38 ` [PATCH 5/6] arm64: dts: freescale: imx8m{m,p}-verdin: Add shared OV5640 overlays Ernest Van Hoecke
2026-09-10 15:38 ` [PATCH 6/6] arm64: dts: freescale: imx8mp-verdin: Add mezzanine " Ernest Van Hoecke
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®