[PATCH v9 8/9] ARM: dts: sun8i-a83t: Add BananaPi M3 OV5640 camera overlay
Chen-Yu Tsai
wens at kernel.org
Sun May 24 13:24:02 PDT 2026
On Mon, May 18, 2026 at 6:15 PM Paul Kocialkowski <paulk at sys-base.io> wrote:
>
> From: Paul Kocialkowski <paul.kocialkowski at bootlin.com>
>
> Add an overlay supporting the OV5640 from the BananaPi Camera v3
> peripheral board. The board has two sensors (OV5640 and OV8865)
> which cannot be supported in parallel as they share the same reset
> pin and the kernel currently has no support for this case.
This part is no longer true. The kernel recently gained shared GPIO
support. I've tried it on Chromebooks to describe a USB 2/3 hub.
(This is actually one chip and one pin, but has two device nodes
to model the USB 2.0 and USB 3.1 portions.)
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski at bootlin.com>
> ---
> arch/arm/boot/dts/allwinner/Makefile | 3 +
> .../sun8i-a83t-bananapi-m3-camera-ov5640.dtso | 115 ++++++++++++++++++
> 2 files changed, 118 insertions(+)
> create mode 100644 arch/arm/boot/dts/allwinner/sun8i-a83t-bananapi-m3-camera-ov5640.dtso
>
> diff --git a/arch/arm/boot/dts/allwinner/Makefile b/arch/arm/boot/dts/allwinner/Makefile
> index f71392a55df8..6975df9d7b46 100644
> --- a/arch/arm/boot/dts/allwinner/Makefile
> +++ b/arch/arm/boot/dts/allwinner/Makefile
> @@ -221,6 +221,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
> sun8i-a33-vstar.dtb \
> sun8i-a83t-allwinner-h8homlet-v2.dtb \
> sun8i-a83t-bananapi-m3.dtb \
> + sun8i-a83t-bananapi-m3-camera-ov5640.dtb \
> sun8i-a83t-cubietruck-plus.dtb \
> sun8i-a83t-tbs-a711.dtb \
> sun8i-h2-plus-bananapi-m2-zero.dtb \
> @@ -270,6 +271,8 @@ dtb-$(CONFIG_MACH_SUN8I) += \
> sun8i-v3s-licheepi-zero-dock.dtb \
> sun8i-v3s-netcube-kumquat.dtb \
> sun8i-v40-bananapi-m2-berry.dtb
> +sun8i-a83t-bananapi-m3-camera-ov5640-dtbs += \
> + sun8i-a83t-bananapi-m3.dtb sun8i-a83t-bananapi-m3-camera-ov5640.dtbo
> sun8i-h2-plus-orangepi-zero-interface-board-dtbs += \
> sun8i-h2-plus-orangepi-zero.dtb sun8i-orangepi-zero-interface-board.dtbo
> sun8i-h3-orangepi-zero-plus2-interface-board-dtbs += \
> diff --git a/arch/arm/boot/dts/allwinner/sun8i-a83t-bananapi-m3-camera-ov5640.dtso b/arch/arm/boot/dts/allwinner/sun8i-a83t-bananapi-m3-camera-ov5640.dtso
> new file mode 100644
> index 000000000000..0d4de0027fea
> --- /dev/null
> +++ b/arch/arm/boot/dts/allwinner/sun8i-a83t-bananapi-m3-camera-ov5640.dtso
> @@ -0,0 +1,115 @@
> +// SPDX-License-Identifier: GPL-2.0 OR X11
> +/*
> + * Copyright 2022 Bootlin
> + * Author: Paul Kocialkowski <paul.kocialkowski at bootlin.com>
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +#include <dt-bindings/clock/sun8i-a83t-ccu.h>
> +#include <dt-bindings/gpio/gpio.h>
> +
> +&{/} {
> + /*
> + * These regulators actually have DLDO4 tied to their EN pin, which is
> + * described as input supply here for lack of a better representation.
> + * Their actual supply is PS, which is always-on.
> + */
> +
> + ov5640_avdd: ov5640-avdd {
You should fix the device node names, as Sashiko mentioned for patch 9.
> + compatible = "regulator-fixed";
> + regulator-name = "ov5640-avdd";
> + regulator-min-microvolt = <2800000>;
> + regulator-max-microvolt = <2800000>;
> + vin-supply = <®_dldo4>;
> + };
> +
> + ov5640_dovdd: ov5640-dovdd {
> + compatible = "regulator-fixed";
> + regulator-name = "ov5640-dovdd";
> + regulator-min-microvolt = <2800000>;
> + regulator-max-microvolt = <2800000>;
> + vin-supply = <®_dldo4>;
> + };
> +
> + ov5640_dvdd: ov5640-dvdd {
This one as well.
> + compatible = "regulator-fixed";
> + regulator-name = "ov5640-dvdd";
> + regulator-min-microvolt = <1500000>;
> + regulator-max-microvolt = <1500000>;
> + vin-supply = <®_dldo4>;
> + };
> +};
> +
> +&csi {
> + pinctrl-names = "default";
> + pinctrl-0 = <&csi_8bit_parallel_pins>;
> + status = "okay";
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port at 0 {
> + reg = <0>;
> +
> + csi_in_ov5640: endpoint {
> + remote-endpoint = <&ov5640_out_csi>;
> + bus-width = <8>;
> + data-shift = <2>;
> + hsync-active = <1>;
> + vsync-active = <1>;
> + pclk-sample = <1>;
> + };
> + };
> + };
> +};
> +
> +&i2c2 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&i2c2_pe_pins>;
> + status = "okay";
> +
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + ov5640: camera at 3c {
> + pinctrl-names = "default";
> + pinctrl-0 = <&csi_mclk_pin>;
> +
> + compatible = "ovti,ov5640";
> + reg = <0x3c>;
Per the "new" DT coding style guide, the compatible property is always
the first oen, and reg, if present, is always the second.
Same comments also apply to patch 9.
Thanks
ChenYu
> +
> + clocks = <&ccu CLK_CSI_MCLK>;
> + clock-names = "xclk";
> + assigned-clocks = <&ccu CLK_CSI_MCLK>;
> + assigned-clock-parents = <&osc24M>;
> + assigned-clock-rates = <24000000>;
> +
> + AVDD-supply = <&ov5640_avdd>;
> + DOVDD-supply = <&ov5640_dovdd>;
> + DVDD-supply = <&ov5640_dvdd>;
> +
> + powerdown-gpios = <&pio 3 15 GPIO_ACTIVE_HIGH>; /* PD15 */
> + reset-gpios = <&pio 4 16 GPIO_ACTIVE_LOW>; /* PE16 */
> +
> + rotation = <180>;
> +
> + port {
> + ov5640_out_csi: endpoint {
> + remote-endpoint = <&csi_in_ov5640>;
> + bus-width = <8>;
> + data-shift = <2>;
> + hsync-active = <1>;
> + vsync-active = <1>;
> + pclk-sample = <1>;
> + };
> + };
> + };
> +};
> +
> +®_dldo4 {
> + regulator-min-microvolt = <2800000>;
> + regulator-max-microvolt = <2800000>;
> +};
> --
> 2.54.0
>
More information about the linux-arm-kernel
mailing list