* [PATCH v2 1/3] arm64: dts: freescale: imx8mp-toradex-smarc: Add on-carrier 3.3V regulator
2026-10-22 14:46 [PATCH v2 0/3] arm64: dts: freescale: imx8mp-toradex-smarc: Add OV5640 overlays Ernest Van Hoecke
@ 2026-10-22 14:46 ` Ernest Van Hoecke
2026-10-22 14:46 ` [PATCH v2 2/3] arm64: dts: freescale: imx8mp-toradex-smarc: Add camera connector nexus Ernest Van Hoecke
2026-10-22 14:46 ` [PATCH v2 3/3] arm64: dts: freescale: imx8mp-toradex-smarc: Add OV5640 overlays Ernest Van Hoecke
2 siblings, 0 replies; 5+ messages in thread
From: Ernest Van Hoecke @ 2026-10-22 14:46 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, imx, linux-arm-kernel, linux-kernel,
Ernest Van Hoecke
From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
Describe the fixed 3.3 V rail of the Toradex SMARC Development Board as
a regulator, like the existing on-carrier 1.8 V rail, so it can be
referenced as a supply by the devices it powers.
Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
---
arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-dev.dts | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-dev.dts b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-dev.dts
index b31de307093c..c28d63293149 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-dev.dts
+++ b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-dev.dts
@@ -32,6 +32,13 @@ reg_carrier_1p8v: regulator-carrier-1p8v {
regulator-name = "On-carrier 1V8";
};
+ reg_carrier_3p3v: regulator-carrier-3p3v {
+ compatible = "regulator-fixed";
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ regulator-name = "On-carrier 3V3";
+ };
+
sound {
compatible = "simple-audio-card";
simple-audio-card,bitclock-master = <&codec_dai>;
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH v2 2/3] arm64: dts: freescale: imx8mp-toradex-smarc: Add camera connector nexus
2026-10-22 14:46 [PATCH v2 0/3] arm64: dts: freescale: imx8mp-toradex-smarc: Add OV5640 overlays Ernest Van Hoecke
2026-10-22 14:46 ` [PATCH v2 1/3] arm64: dts: freescale: imx8mp-toradex-smarc: Add on-carrier 3.3V regulator Ernest Van Hoecke
@ 2026-10-22 14:46 ` Ernest Van Hoecke
2026-10-22 15:16 ` sashiko-bot
2026-10-22 14:46 ` [PATCH v2 3/3] arm64: dts: freescale: imx8mp-toradex-smarc: Add OV5640 overlays Ernest Van Hoecke
2 siblings, 1 reply; 5+ messages in thread
From: Ernest Van Hoecke @ 2026-10-22 14:46 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, imx, linux-arm-kernel, linux-kernel,
Ernest Van Hoecke
From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
The SMARC Development Board exposes two 24-pin camera connectors with
reset and power-control signals routed through the SoM GPIO expander.
Describe the connectors as GPIO nexuses and add stable labels for the
camera buses and CSI receivers, so accessory overlays can use the
carrier's interfaces without embedding its GPIO routing.
Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
---
.../dts/freescale/imx8mp-toradex-smarc-dev.dts | 26 ++++++++++++++++++++++
.../boot/dts/freescale/imx8mp-toradex-smarc.dtsi | 10 +++++++--
2 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-dev.dts b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-dev.dts
index c28d63293149..e0096388fbfe 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-dev.dts
+++ b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-dev.dts
@@ -13,6 +13,32 @@ / {
"toradex,smarc-imx8mp",
"fsl,imx8mp";
+ smarc_csi0: camera-connector-0 {
+ compatible = "toradex,camera-connector";
+ #gpio-cells = <2>;
+ /*
+ * CAM_0_CON_RST (pin 11) - SMARC GPIO2 (P110)
+ * CAM_0_CON_PWRCTRL (pin 24) - SMARC GPIO0 (P108)
+ */
+ gpio-map = <0 0 &som_gpio_expander 2 GPIO_ACTIVE_HIGH>,
+ <3 0 &som_gpio_expander 0 GPIO_ACTIVE_HIGH>;
+ gpio-map-mask = <0xffffffff 0x0>;
+ gpio-map-pass-thru = <0x0 0xffffffff>;
+ };
+
+ smarc_csi1: camera-connector-1 {
+ compatible = "toradex,camera-connector";
+ #gpio-cells = <2>;
+ /*
+ * CAM_1_CON_RST (pin 11) - SMARC GPIO3 (P111)
+ * CAM_1_CON_PWRCTRL (pin 24) - SMARC GPIO1 (P109)
+ */
+ gpio-map = <0 0 &som_gpio_expander 3 GPIO_ACTIVE_HIGH>,
+ <3 0 &som_gpio_expander 1 GPIO_ACTIVE_HIGH>;
+ gpio-map-mask = <0xffffffff 0x0>;
+ gpio-map-pass-thru = <0x0 0xffffffff>;
+ };
+
hdmi-connector {
compatible = "hdmi-connector";
label = "J64";
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc.dtsi b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc.dtsi
index eb8b9db7e3cd..e8e718ef7822 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc.dtsi
@@ -587,7 +587,7 @@ &i2c2 {
};
/* SMARC I2C_CAM0 */
-&i2c3 {
+smarc_csi0_i2c: &i2c3 {
pinctrl-names = "default", "gpio";
pinctrl-0 = <&pinctrl_i2c3>;
pinctrl-1 = <&pinctrl_i2c3_gpio>;
@@ -616,7 +616,7 @@ eeprom@50 {
};
/* SMARC I2C_CAM1 */
-&i2c5 {
+smarc_csi1_i2c: &i2c5 {
pinctrl-names = "default", "gpio";
pinctrl-0 = <&pinctrl_i2c5>;
pinctrl-1 = <&pinctrl_i2c5_gpio>;
@@ -655,6 +655,12 @@ fec_phy: ethernet-phy@2 {
};
};
+/* SMARC CSI1 */
+smarc_csi1_rx: &mipi_csi_0 {};
+
+/* SMARC CSI0 */
+smarc_csi0_rx: &mipi_csi_1 {};
+
/* SMARC PCIE_A */
&pcie {
pinctrl-names = "default";
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH v2 2/3] arm64: dts: freescale: imx8mp-toradex-smarc: Add camera connector nexus
2026-10-22 14:46 ` [PATCH v2 2/3] arm64: dts: freescale: imx8mp-toradex-smarc: Add camera connector nexus Ernest Van Hoecke
@ 2026-10-22 15:16 ` sashiko-bot
0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-10-22 15:16 UTC (permalink / raw)
To: Ernest Van Hoecke; +Cc: devicetree, imx, robh, conor+dt, Frank.Li
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] arm64: dts: imx8mp-toradex-smarc: camera-connector nexus breaks fw_devlink
- [Medium] arm64: dts: freescale: undocumented toradex,camera-connector compatible
--
commit d093f7d003a6a1108921f20ccc8a5a3a82a991c7
Author: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
arm64: dts: freescale: imx8mp-toradex-smarc: Add camera connector nexus
This commit adds two camera connector gpio nexus nodes to
imx8mp-toradex-smarc-dev.dts and adds labels for the camera i2c buses and
mipi csi receivers in imx8mp-toradex-smarc.dtsi.
> diff --git a/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-dev.dts b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-dev.dts
> index c28d63293149b..e0096388fbfe1 100644
> --- a/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-dev.dts
> +++ b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-dev.dts
> @@ -13,6 +13,32 @@ / {
> "toradex,smarc-imx8mp",
> "fsl,imx8mp";
>
> + smarc_csi0: camera-connector-0 {
> + compatible = "toradex,camera-connector";
[Severity: Medium]
Is there a devicetree binding schema documenting the
"toradex,camera-connector" compatible string used in camera-connector-0 and
camera-connector-1 in
arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-dev.dts?
Neither Documentation/devicetree/bindings/ in the tree nor this patch series
defines "toradex,camera-connector", which causes dtbs_check validation on
imx8mp-toradex-smarc-dev.dtb to fail to match any schema:
Documentation/devicetree/bindings/submitting-patches.rst:
6) Any compatible strings used in a chip or board DTS file must be
previously documented in the corresponding DT binding file
in Documentation/devicetree/bindings. This rule applies even if
the Linux device driver does not yet match on the compatible
string.
Should a binding schema be added before using this compatible string?
> + #gpio-cells = <2>;
> + /*
> + * CAM_0_CON_RST (pin 11) - SMARC GPIO2 (P110)
> + * CAM_0_CON_PWRCTRL (pin 24) - SMARC GPIO0 (P108)
> + */
> + gpio-map = <0 0 &som_gpio_expander 2 GPIO_ACTIVE_HIGH>,
> + <3 0 &som_gpio_expander 0 GPIO_ACTIVE_HIGH>;
> + gpio-map-mask = <0xffffffff 0x0>;
> + gpio-map-pass-thru = <0x0 0xffffffff>;
> + };
> +
> + smarc_csi1: camera-connector-1 {
> + compatible = "toradex,camera-connector";
> + #gpio-cells = <2>;
> + /*
> + * CAM_1_CON_RST (pin 11) - SMARC GPIO3 (P111)
> + * CAM_1_CON_PWRCTRL (pin 24) - SMARC GPIO1 (P109)
> + */
> + gpio-map = <0 0 &som_gpio_expander 3 GPIO_ACTIVE_HIGH>,
> + <3 0 &som_gpio_expander 1 GPIO_ACTIVE_HIGH>;
> + gpio-map-mask = <0xffffffff 0x0>;
> + gpio-map-pass-thru = <0x0 0xffffffff>;
> + };
[Severity: High]
Will routing consumer gpios through camera-connector-0 and
camera-connector-1 cause fw_devlink to block consumer camera devices from
probing?
Because camera-connector-0 and camera-connector-1 are top-level nodes with a
compatible property, of_platform_default_populate_init() ->
of_platform_default_populate() -> of_platform_populate() ->
of_platform_bus_create() instantiates platform devices for them that have no
matching driver.
When a consumer device (such as camera@3c in the ov5640 overlay) references
&smarc_csi0 or &smarc_csi1 in reset-gpios and powerdown-gpios, fw_devlink
resolves the supplier through of_link_property() -> parse_gpios() ->
parse_suffix_prop_cells():
drivers/of/property.c:parse_suffix_prop_cells() {
if (of_parse_phandle_with_args(np, prop_name, cells_name, index,
&sup_args))
return NULL;
return sup_args.np;
}
Unlike of_get_named_gpiod_flags() in drivers/gpio/gpiolib-of.c, which calls
of_parse_phandle_with_args_map() to traverse gpio-map,
parse_suffix_prop_cells() calls of_parse_phandle_with_args() and stops at
the nexus node itself.
As a result, fw_devlink_create_devlink() links the camera consumer to the
driverless camera-connector platform device instead of som_gpio_expander.
When the camera consumer probes via really_probe() ->
device_links_check_suppliers(), it sees that the supplier has no bound
driver:
drivers/base/core.c:device_links_check_suppliers() {
if (link->status != DL_STATE_AVAILABLE &&
!device_link_test(link, DL_FLAG_SYNC_STATE_ONLY)) {
...
device_links_missing_supplier(dev);
ret = dev_err_probe(dev, -EPROBE_DEFER,
"supplier %s not ready\n", dev_name(link->supplier));
break;
}
}
Note that simply dropping the compatible property from camera-connector-0
and camera-connector-1 without updating fw_devlink to traverse gpio-map
would leave the nexus nodes without a struct device, causing
fwnode_links_check_suppliers() in device_links_check_suppliers() to defer
the consumer permanently with "wait for supplier /camera-connector-0" even
after driver_deferred_probe_timeout expires.
Could this regression be avoided by teaching fw_devlink to resolve through
gpio-map (for example using of_parse_phandle_with_args_map() in
drivers/of/property.c) before relying on a driverless gpio nexus node?
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261022-v1-smarc-imx8mp-cameras-v2-0-cfe3d25e7aed@toradex.com?part=2
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 3/3] arm64: dts: freescale: imx8mp-toradex-smarc: Add OV5640 overlays
2026-10-22 14:46 [PATCH v2 0/3] arm64: dts: freescale: imx8mp-toradex-smarc: Add OV5640 overlays Ernest Van Hoecke
2026-10-22 14:46 ` [PATCH v2 1/3] arm64: dts: freescale: imx8mp-toradex-smarc: Add on-carrier 3.3V regulator Ernest Van Hoecke
2026-10-22 14:46 ` [PATCH v2 2/3] arm64: dts: freescale: imx8mp-toradex-smarc: Add camera connector nexus Ernest Van Hoecke
@ 2026-10-22 14:46 ` Ernest Van Hoecke
2 siblings, 0 replies; 5+ messages in thread
From: Ernest Van Hoecke @ 2026-10-22 14:46 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, imx, linux-arm-kernel, linux-kernel,
Ernest Van Hoecke
From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
Add device tree overlays for the current 27 MHz and legacy 24 MHz
Toradex OV5640 camera modules connected to CSI0 and CSI1 on the SMARC
Development Board.
CAM_n_CON_PWRCTRL (pin 24) is an active-high power-up input of the
camera module, so it is described as an active-low powerdown GPIO.
The overlays are also combined with the SMARC Development Board device
tree to provide ready-to-use DTBs.
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 | 17 +++++
.../imx8mp-toradex-smarc-csi0-ov5640-24mhz.dtso | 15 +++++
.../imx8mp-toradex-smarc-csi0-ov5640.dtso | 75 ++++++++++++++++++++++
.../imx8mp-toradex-smarc-csi1-ov5640-24mhz.dtso | 15 +++++
.../imx8mp-toradex-smarc-csi1-ov5640.dtso | 75 ++++++++++++++++++++++
5 files changed, 197 insertions(+)
diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
index a80cccf34eb5..2defe77ee7df 100644
--- a/arch/arm64/boot/dts/freescale/Makefile
+++ b/arch/arm64/boot/dts/freescale/Makefile
@@ -709,11 +709,28 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mp-skov-revc-bd500.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-skov-revc-hdmi.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-skov-revc-tian-g07017.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-skov-revc-jutouch-jt101tm023.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-toradex-smarc-csi0-ov5640-24mhz.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-toradex-smarc-csi0-ov5640.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-toradex-smarc-csi1-ov5640-24mhz.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-toradex-smarc-csi1-ov5640.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-toradex-smarc-dev-csi0-ov5640-24mhz.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-toradex-smarc-dev-csi0-ov5640.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-toradex-smarc-dev-csi1-ov5640-24mhz.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mp-toradex-smarc-dev-csi1-ov5640.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-toradex-smarc-dev.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-tqma8mpql-mba8mpxl.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-tqma8mpql-mba8mp-ras314.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-tqma8mpqs-mb-smarc-2.dtb
+imx8mp-toradex-smarc-dev-csi0-ov5640-24mhz-dtbs := imx8mp-toradex-smarc-dev.dtb \
+ imx8mp-toradex-smarc-csi0-ov5640-24mhz.dtbo
+imx8mp-toradex-smarc-dev-csi0-ov5640-dtbs := imx8mp-toradex-smarc-dev.dtb \
+ imx8mp-toradex-smarc-csi0-ov5640.dtbo
+imx8mp-toradex-smarc-dev-csi1-ov5640-24mhz-dtbs := imx8mp-toradex-smarc-dev.dtb \
+ imx8mp-toradex-smarc-csi1-ov5640-24mhz.dtbo
+imx8mp-toradex-smarc-dev-csi1-ov5640-dtbs := imx8mp-toradex-smarc-dev.dtb \
+ imx8mp-toradex-smarc-csi1-ov5640.dtbo
+
imx8mp-tx8p-ml81-moduline-display-106-av101hdt-a10-dtbs += imx8mp-tx8p-ml81-moduline-display-106.dtb \
imx8mp-tx8p-ml81-moduline-display-106-av101hdt-a10.dtbo
imx8mp-tx8p-ml81-moduline-display-106-av123z7m-n17-dtbs += imx8mp-tx8p-ml81-moduline-display-106.dtb \
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-csi0-ov5640-24mhz.dtso b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-csi0-ov5640-24mhz.dtso
new file mode 100644
index 000000000000..7e6991b95dec
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-csi0-ov5640-24mhz.dtso
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Copyright (c) Toradex
+ *
+ * Toradex CSI Camera Module 5MP OV5640 with 24 MHz oscillator connected
+ * via Toradex SMARC Development Board CSI0 connector J45.
+ *
+ * https://developer.toradex.com/hardware/legacy-products/other/csi-camera-module-5mp-ov5640/
+ */
+
+#include "imx8mp-toradex-smarc-csi0-ov5640.dtso"
+
+&clk_csi0_ov5640_osc {
+ clock-frequency = <24000000>;
+};
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-csi0-ov5640.dtso b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-csi0-ov5640.dtso
new file mode 100644
index 000000000000..23b155beec2a
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-csi0-ov5640.dtso
@@ -0,0 +1,75 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Copyright (c) Toradex
+ *
+ * Toradex CSI Camera Set 5MP OV5640 connected via Toradex SMARC
+ * Development Board CSI0 connector J45.
+ *
+ * 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 <dt-bindings/gpio/gpio.h>
+
+&{/} {
+ clk_csi0_ov5640_osc: ov5640-csi0-xclk {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <27000000>;
+ };
+};
+
+&isi_0 {
+ status = "okay";
+};
+
+/* SMARC I2C_CAM0 */
+&smarc_csi0_i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ status = "okay";
+
+ camera@3c {
+ compatible = "ovti,ov5640";
+ reg = <0x3c>;
+ clocks = <&clk_csi0_ov5640_osc>;
+ clock-names = "xclk";
+ AVDD-supply = <®_carrier_3p3v>;
+ DOVDD-supply = <®_carrier_3p3v>;
+ DVDD-supply = <®_carrier_3p3v>;
+ /* CAM_0_CON_PWRCTRL, pin 24 */
+ powerdown-gpios = <&smarc_csi0 3 GPIO_ACTIVE_LOW>;
+ /* CAM_0_CON_RST, pin 11 */
+ reset-gpios = <&smarc_csi0 0 GPIO_ACTIVE_LOW>;
+
+ port {
+ ov5640_csi0_to_smarc_csi_rx: endpoint {
+ clock-lanes = <0>;
+ data-lanes = <1 2>;
+ remote-endpoint = <&smarc_csi0_rx_in>;
+ };
+ };
+ };
+};
+
+&smarc_csi0_rx {
+ status = "okay";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ smarc_csi0_rx_in: endpoint {
+ data-lanes = <1 2>;
+ remote-endpoint = <&ov5640_csi0_to_smarc_csi_rx>;
+ };
+ };
+ };
+};
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-csi1-ov5640-24mhz.dtso b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-csi1-ov5640-24mhz.dtso
new file mode 100644
index 000000000000..f6bfc3d49f5e
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-csi1-ov5640-24mhz.dtso
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Copyright (c) Toradex
+ *
+ * Toradex CSI Camera Module 5MP OV5640 with 24 MHz oscillator connected
+ * via Toradex SMARC Development Board CSI1 connector J46.
+ *
+ * https://developer.toradex.com/hardware/legacy-products/other/csi-camera-module-5mp-ov5640/
+ */
+
+#include "imx8mp-toradex-smarc-csi1-ov5640.dtso"
+
+&clk_csi1_ov5640_osc {
+ clock-frequency = <24000000>;
+};
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-csi1-ov5640.dtso b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-csi1-ov5640.dtso
new file mode 100644
index 000000000000..d78f46a764f8
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8mp-toradex-smarc-csi1-ov5640.dtso
@@ -0,0 +1,75 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Copyright (c) Toradex
+ *
+ * Toradex CSI Camera Set 5MP OV5640 connected via Toradex SMARC
+ * Development Board CSI1 connector J46.
+ *
+ * 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 <dt-bindings/gpio/gpio.h>
+
+&{/} {
+ clk_csi1_ov5640_osc: ov5640-csi1-xclk {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <27000000>;
+ };
+};
+
+&isi_0 {
+ status = "okay";
+};
+
+/* SMARC I2C_CAM1 */
+&smarc_csi1_i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ status = "okay";
+
+ camera@3c {
+ compatible = "ovti,ov5640";
+ reg = <0x3c>;
+ clocks = <&clk_csi1_ov5640_osc>;
+ clock-names = "xclk";
+ AVDD-supply = <®_carrier_3p3v>;
+ DOVDD-supply = <®_carrier_3p3v>;
+ DVDD-supply = <®_carrier_3p3v>;
+ /* CAM_1_CON_PWRCTRL, pin 24 */
+ powerdown-gpios = <&smarc_csi1 3 GPIO_ACTIVE_LOW>;
+ /* CAM_1_CON_RST, pin 11 */
+ reset-gpios = <&smarc_csi1 0 GPIO_ACTIVE_LOW>;
+
+ port {
+ ov5640_csi1_to_smarc_csi_rx: endpoint {
+ clock-lanes = <0>;
+ data-lanes = <1 2>;
+ remote-endpoint = <&smarc_csi1_rx_in>;
+ };
+ };
+ };
+};
+
+&smarc_csi1_rx {
+ status = "okay";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ smarc_csi1_rx_in: endpoint {
+ data-lanes = <1 2>;
+ remote-endpoint = <&ov5640_csi1_to_smarc_csi_rx>;
+ };
+ };
+ };
+};
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread