Re: [RFC PATCH 7/8] arm64: dts: ti: k3-am62a7: FPDLink overlays for LI OV2312

From: Laurent Pinchart

Date: Sat Sep 26 2026 - 10:57:36 EST


On Fri, Sep 25, 2026 at 07:00:00PM +0530, Rishikesh Donadkar wrote:
> From: Jai Luthra <j-luthra@xxxxxx>
>
> OV2312 is a raw (4x4 RGB-IR bayer) sensor, the LI-OV2312-FPDLinkIII-110H
> module [1] packages it with an FPDLink-III serializer (DS90UB953) for
> use with sensor fusion setups using FPDLink-III deserializer boards.
>
> Link: https://www.leopardimaging.com/product/autonomous-camera/ti-fpdlinkiii-cameras/li-ov2312-fpdlinkiii/li-ov2312-fpdlinkiii-110h/ [1]
> Signed-off-by: Jai Luthra <j-luthra@xxxxxx>
> Signed-off-by: Rishikesh Donadkar <r-donadkar@xxxxxx>
> ---
> arch/arm64/boot/dts/ti/Makefile | 6 ++
> .../boot/dts/ti/k3-fpdlink-ov2312-0-0.dtso | 89 +++++++++++++++++++
> .../boot/dts/ti/k3-fpdlink-ov2312-0-1.dtso | 89 +++++++++++++++++++
> .../boot/dts/ti/k3-fpdlink-ov2312-0-2.dtso | 89 +++++++++++++++++++
> .../boot/dts/ti/k3-fpdlink-ov2312-0-3.dtso | 89 +++++++++++++++++++

This seems to be a very strong candidate for the new DT addons
(https://bootlin.com/blog/device-tree-addons-describing-non-discoverable-addon-boards-and-connectors/).
It would help getting this feature merged if you could give it a try.

> 5 files changed, 362 insertions(+)
> create mode 100644 arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-0.dtso
> create mode 100644 arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-1.dtso
> create mode 100644 arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-2.dtso
> create mode 100644 arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-3.dtso
>
> diff --git a/arch/arm64/boot/dts/ti/Makefile b/arch/arm64/boot/dts/ti/Makefile
> index 795978e962ee..8d608e244087 100644
> --- a/arch/arm64/boot/dts/ti/Makefile
> +++ b/arch/arm64/boot/dts/ti/Makefile
> @@ -508,5 +508,11 @@ dtb- += k3-am625-beagleplay-csi2-ov5640.dtb \
> k3-j784s4-evm-usb0-type-a.dtb \
> k3-j784s4-evm-usxgmii-exp1-exp2.dtb
>
> +# FPDLink Sensors
> +dtb-$(CONFIG_ARCH_K3) += k3-fpdlink-ov2312-0-0.dtbo \
> + k3-fpdlink-ov2312-0-1.dtbo \
> + k3-fpdlink-ov2312-0-2.dtbo \
> + k3-fpdlink-ov2312-0-3.dtbo
> +
> # Enable support for device-tree overlays
> DTC_FLAGS := -@
> diff --git a/arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-0.dtso b/arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-0.dtso
> new file mode 100644
> index 000000000000..0829f01a0f90
> --- /dev/null
> +++ b/arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-0.dtso
> @@ -0,0 +1,89 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * IMX390 FPD-Link 3 Camera Module
> + * Copyright (c) 2023 Texas Instruments Incorporated - http://www.ti.com/
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +#include <dt-bindings/gpio/gpio.h>
> +
> +&deserializer_0_ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + /* FPDLink RX 0 */
> + port@0 {
> + reg = <0>;
> +
> + ub960_fpd3_1_in: endpoint {
> + remote-endpoint = <&ub953_1_out>;
> + };
> + };
> +};
> +
> +&deserializer_0_links {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + link@0 {
> + reg = <0>;
> + i2c-alias = <0x44>;
> +
> + ti,rx-mode = <3>;
> +
> + serializer: serializer {
> + compatible = "ti,ds90ub953-q1";
> + gpio-controller;
> + #gpio-cells = <2>;
> +
> + #clock-cells = <0>;
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> + ub953_1_in: endpoint {
> + data-lanes = <1 2>;
> + /*clock-noncontinuous;*/
> + remote-endpoint = <&sensor_1_out>;
> + };
> + };
> +
> + port@1 {
> + reg = <1>;
> +
> + ub953_1_out: endpoint {
> + remote-endpoint = <&ub960_fpd3_1_in>;
> + };
> + };
> + };
> +
> + i2c {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + sensor@60 {
> + compatible = "ovti,ov2312";
> + reg = <0x60>;
> +
> + clocks = <&serializer>;
> + clock-names = "xvclk";
> + assigned-clocks = <&serializer>;
> + assigned-clock-rates = <24000000>;
> +
> + reset-gpios = <&serializer 2 GPIO_ACTIVE_HIGH>;
> +
> + port {
> + sensor_1_out: endpoint {
> + remote-endpoint = <&ub953_1_in>;
> + };
> + };
> + };
> + };
> + };
> + };
> +};
> diff --git a/arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-1.dtso b/arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-1.dtso
> new file mode 100644
> index 000000000000..06cba8c7397f
> --- /dev/null
> +++ b/arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-1.dtso
> @@ -0,0 +1,89 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * IMX390 FPD-Link 3 Camera Module
> + * Copyright (c) 2023 Texas Instruments Incorporated - http://www.ti.com/
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +#include <dt-bindings/gpio/gpio.h>
> +
> +&deserializer_0_ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + /* FPDLink RX 1 */
> + port@1 {
> + reg = <1>;
> +
> + ub960_fpd3_1_in: endpoint {
> + remote-endpoint = <&ub953_1_out>;
> + };
> + };
> +};
> +
> +&deserializer_0_links {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + link@1 {
> + reg = <1>;
> + i2c-alias = <0x45>;
> +
> + ti,rx-mode = <3>;
> +
> + serializer: serializer {
> + compatible = "ti,ds90ub953-q1";
> + gpio-controller;
> + #gpio-cells = <2>;
> +
> + #clock-cells = <0>;
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> + ub953_1_in: endpoint {
> + data-lanes = <1 2>;
> + /*clock-noncontinuous;*/
> + remote-endpoint = <&sensor_1_out>;
> + };
> + };
> +
> + port@1 {
> + reg = <1>;
> +
> + ub953_1_out: endpoint {
> + remote-endpoint = <&ub960_fpd3_1_in>;
> + };
> + };
> + };
> +
> + i2c {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + sensor@60 {
> + compatible = "ovti,ov2312";
> + reg = <0x60>;
> +
> + clocks = <&serializer>;
> + clock-names = "xvclk";
> + assigned-clocks = <&serializer>;
> + assigned-clock-rates = <24000000>;
> +
> + reset-gpios = <&serializer 2 GPIO_ACTIVE_HIGH>;
> +
> + port {
> + sensor_1_out: endpoint {
> + remote-endpoint = <&ub953_1_in>;
> + };
> + };
> + };
> + };
> + };
> + };
> +};
> diff --git a/arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-2.dtso b/arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-2.dtso
> new file mode 100644
> index 000000000000..7d377dbe5bbf
> --- /dev/null
> +++ b/arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-2.dtso
> @@ -0,0 +1,89 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * IMX390 FPD-Link 3 Camera Module
> + * Copyright (c) 2023 Texas Instruments Incorporated - http://www.ti.com/
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +#include <dt-bindings/gpio/gpio.h>
> +
> +&deserializer_0_ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + /* FPDLink RX 2 */
> + port@2 {
> + reg = <2>;
> +
> + ub960_fpd3_1_in: endpoint {
> + remote-endpoint = <&ub953_1_out>;
> + };
> + };
> +};
> +
> +&deserializer_0_links {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + link@2 {
> + reg = <2>;
> + i2c-alias = <0x46>;
> +
> + ti,rx-mode = <3>;
> +
> + serializer: serializer {
> + compatible = "ti,ds90ub953-q1";
> + gpio-controller;
> + #gpio-cells = <2>;
> +
> + #clock-cells = <0>;
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> + ub953_1_in: endpoint {
> + data-lanes = <1 2>;
> + /*clock-noncontinuous;*/
> + remote-endpoint = <&sensor_1_out>;
> + };
> + };
> +
> + port@1 {
> + reg = <1>;
> +
> + ub953_1_out: endpoint {
> + remote-endpoint = <&ub960_fpd3_1_in>;
> + };
> + };
> + };
> +
> + i2c {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + sensor@60 {
> + compatible = "ovti,ov2312";
> + reg = <0x60>;
> +
> + clocks = <&serializer>;
> + clock-names = "xvclk";
> + assigned-clocks = <&serializer>;
> + assigned-clock-rates = <24000000>;
> +
> + reset-gpios = <&serializer 2 GPIO_ACTIVE_HIGH>;
> +
> + port {
> + sensor_1_out: endpoint {
> + remote-endpoint = <&ub953_1_in>;
> + };
> + };
> + };
> + };
> + };
> + };
> +};
> diff --git a/arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-3.dtso b/arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-3.dtso
> new file mode 100644
> index 000000000000..f74bff5f12b0
> --- /dev/null
> +++ b/arch/arm64/boot/dts/ti/k3-fpdlink-ov2312-0-3.dtso
> @@ -0,0 +1,89 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * IMX390 FPD-Link 3 Camera Module
> + * Copyright (c) 2023 Texas Instruments Incorporated - http://www.ti.com/
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +#include <dt-bindings/gpio/gpio.h>
> +
> +&deserializer_0_ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + /* FPDLink RX 3 */
> + port@3 {
> + reg = <3>;
> +
> + ub960_fpd3_1_in: endpoint {
> + remote-endpoint = <&ub953_1_out>;
> + };
> + };
> +};
> +
> +&deserializer_0_links {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + link@3 {
> + reg = <3>;
> + i2c-alias = <0x47>;
> +
> + ti,rx-mode = <3>;
> +
> + serializer: serializer {
> + compatible = "ti,ds90ub953-q1";
> + gpio-controller;
> + #gpio-cells = <2>;
> +
> + #clock-cells = <0>;
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> + ub953_1_in: endpoint {
> + data-lanes = <1 2>;
> + /*clock-noncontinuous;*/
> + remote-endpoint = <&sensor_1_out>;
> + };
> + };
> +
> + port@1 {
> + reg = <1>;
> +
> + ub953_1_out: endpoint {
> + remote-endpoint = <&ub960_fpd3_1_in>;
> + };
> + };
> + };
> +
> + i2c {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + sensor@60 {
> + compatible = "ovti,ov2312";
> + reg = <0x60>;
> +
> + clocks = <&serializer>;
> + clock-names = "xvclk";
> + assigned-clocks = <&serializer>;
> + assigned-clock-rates = <24000000>;
> +
> + reset-gpios = <&serializer 2 GPIO_ACTIVE_HIGH>;
> +
> + port {
> + sensor_1_out: endpoint {
> + remote-endpoint = <&ub953_1_in>;
> + };
> + };
> + };
> + };
> + };
> + };
> +};

--
Regards,

Laurent Pinchart