Skip to content

Instantly share code, notes, and snippets.

@okalachev
Last active January 4, 2023 15:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save okalachev/b75e22a82e2bcca82b451967be9f8c06 to your computer and use it in GitHub Desktop.
Save okalachev/b75e22a82e2bcca82b451967be9f8c06 to your computer and use it in GitHub Desktop.
DT overlay to run OV7251 camera on CAM0 port of Compute Module 4

Device Tree overlay to run OV7251 camera on CAM0 port of Compute Module 4

This will work on Raspberry Pi OS 2021-01-12 (related DT files were changed in later release).

Copy the binary device tree overlay file to /boot/overlays/:

sudo cp ov7251cam0.dtbo /boot/overlays/ov7251cam0.dtbo

Enable the overlay in boot/config.txt:

dtoverlay=ov7251cam0

Reboot the RPi with sudo reboot. The camera driver should run.

Compiling

To compile the device tree from source use dts:

dtc -I dts -O dtb -o ov7251cam0.dtbo ov7251cam0-overlay.dts

Base

Link to base overlay file: ov7251-overlay.dts.

// SPDX-License-Identifier: GPL-2.0-only
// Definitions for OV7251 camera module on VC I2C bus
/dts-v1/;
/plugin/;
//#include <dt-bindings/gpio/gpio.h>
/{
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2c_vc>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
ov7251: ov7251@60 {
compatible = "ovti,ov7251";
reg = <0x60>;
status = "okay";
clocks = <&ov7251_clk>;
clock-names = "xclk";
clock-frequency = <24000000>;
vdddo-supply = <&ov7251_dovdd>;
vdda-supply = <&ov7251_avdd>;
vddd-supply = <&ov7251_dvdd>;
enable-gpios = <&gpio 41 0>;
port {
ov7251_0: endpoint {
remote-endpoint = <&csi0_ep>;
clock-lanes = <0>;
data-lanes = <1>;
clock-noncontinuous;
link-frequencies =
/bits/ 64 <456000000>;
};
};
};
};
};
fragment@1 {
target = <&csi0>;
__overlay__ {
status = "okay";
port {
csi0_ep: endpoint {
remote-endpoint = <&ov7251_0>;
data-lanes = <1>;
};
};
};
};
fragment@2 {
target = <&i2c0if>;
__overlay__ {
status = "okay";
};
};
fragment@3 {
target-path="/";
__overlay__ {
ov7251_avdd: fixedregulator@0 {
compatible = "regulator-fixed";
regulator-name = "ov7251_avdd";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
};
ov7251_dovdd: fixedregulator@1 {
compatible = "regulator-fixed";
regulator-name = "ov7251_dovdd";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
ov7251_dvdd: fixedregulator@2 {
compatible = "regulator-fixed";
regulator-name = "ov7251_dvdd";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
};
ov7251_clk: ov7251-clk {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <24000000>;
};
};
};
fragment@4 {
target = <&i2c0mux>;
__overlay__ {
status = "okay";
};
};
fragment@5 {
target-path="/__overrides__";
__overlay__ {
cam0-pwdn-ctrl = <&ov7251>,"enable-gpios:0";
cam0-pwdn = <&ov7251>,"enable-gpios:4";
};
};
};
@okalachev
Copy link
Author

@kralo
Copy link

kralo commented Jan 4, 2023

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment