openwrt/target/linux/bcm27xx/patches-6.1/950-0567-dtoverlays-Add-VCM-option-to-Arducam64MP.patch

152 lines
3.9 KiB
Diff
Raw Normal View History

From 96fddfeae4b139aa4b84540a1784a5be8053454c Mon Sep 17 00:00:00 2001
From: Lee Jackson <info@arducam.com>
Date: Mon, 27 Feb 2023 08:47:23 +0800
Subject: [PATCH] dtoverlays: Add VCM option to Arducam64MP
VCM is enabled by default, but you can use 'vcm=off' to disable VCM support.
Signed-off-by: Lee Jackson <lee.jackson@arducam.com>
---
arch/arm/boot/dts/overlays/README | 2 +
.../dts/overlays/arducam-64mp-overlay.dts | 61 +++++++++----------
arch/arm/boot/dts/overlays/arducam-64mp.dtsi | 34 +++++++++++
3 files changed, 65 insertions(+), 32 deletions(-)
create mode 100644 arch/arm/boot/dts/overlays/arducam-64mp.dtsi
--- a/arch/arm/boot/dts/overlays/README
+++ b/arch/arm/boot/dts/overlays/README
@@ -613,6 +613,8 @@ Params: rotation Mounting
configuring the sensor (default on)
cam0 Adopt the default configuration for CAM0 on a
Compute Module (CSI0, i2c_vc, and cam0_reg).
+ vcm Select lens driver state. Default is enabled,
+ but vcm=off will disable.
Name: arducam-pivariety
--- a/arch/arm/boot/dts/overlays/arducam-64mp-overlay.dts
+++ b/arch/arm/boot/dts/overlays/arducam-64mp-overlay.dts
@@ -13,32 +13,7 @@
#size-cells = <0>;
status = "okay";
- arducam_64mp: arducam_64mp@1a {
- compatible = "arducam,64mp";
- reg = <0x1a>;
- status = "okay";
-
- clocks = <&cam1_clk>;
- clock-names = "xclk";
-
- VANA-supply = <&cam1_reg>; /* 2.8v */
- VDIG-supply = <&cam_dummy_reg>; /* 1.8v */
- VDDL-supply = <&cam_dummy_reg>; /* 1.2v */
-
- rotation = <0>;
- orientation = <2>;
-
- port {
- arducam_64mp_0: endpoint {
- remote-endpoint = <&csi1_ep>;
- clock-lanes = <0>;
- data-lanes = <1 2>;
- clock-noncontinuous;
- link-frequencies =
- /bits/ 64 <456000000>;
- };
- };
- };
+ #include "arducam-64mp.dtsi"
};
};
@@ -49,8 +24,8 @@
brcm,media-controller;
port{
- csi1_ep: endpoint{
- remote-endpoint = <&arducam_64mp_0>;
+ csi_ep: endpoint{
+ remote-endpoint = <&cam_endpoint>;
clock-lanes = <0>;
data-lanes = <1 2>;
clock-noncontinuous;
@@ -81,14 +56,36 @@
};
};
+ fragment@5 {
+ target = <&cam_node>;
+ __overlay__ {
+ lens-focus = <&vcm_node>;
+ };
+ };
+
__overrides__ {
- rotation = <&arducam_64mp>,"rotation:0";
- orientation = <&arducam_64mp>,"orientation:0";
+ rotation = <&cam_node>,"rotation:0";
+ orientation = <&cam_node>,"orientation:0";
media-controller = <&csi>,"brcm,media-controller?";
cam0 = <&i2c_frag>, "target:0=",<&i2c_vc>,
<&csi_frag>, "target:0=",<&csi0>,
<&clk_frag>, "target:0=",<&cam0_clk>,
- <&arducam_64mp>, "clocks:0=",<&cam0_clk>,
- <&arducam_64mp>, "VANA-supply:0=",<&cam0_reg>;
+ <&cam_node>, "clocks:0=",<&cam0_clk>,
+ <&cam_node>, "VANA-supply:0=",<&cam0_reg>,
+ <&vcm_node>, "VDD-supply:0=", <&cam0_reg>;
+ vcm = <&vcm_node>, "status",
+ <0>, "=5";
};
};
+
+&cam_node {
+ status = "okay";
+};
+
+&cam_endpoint {
+ remote-endpoint = <&csi_ep>;
+};
+
+&vcm_node {
+ status = "okay";
+};
--- /dev/null
+++ b/arch/arm/boot/dts/overlays/arducam-64mp.dtsi
@@ -0,0 +1,34 @@
+// Fragment that configures a Arducam64MP
+
+cam_node: arducam_64mp@1a {
+ compatible = "arducam,64mp";
+ reg = <0x1a>;
+ status = "disabled";
+
+ clocks = <&cam1_clk>;
+ clock-names = "xclk";
+
+ VANA-supply = <&cam1_reg>; /* 2.8v */
+ VDIG-supply = <&cam_dummy_reg>; /* 1.8v */
+ VDDL-supply = <&cam_dummy_reg>; /* 1.2v */
+
+ rotation = <0>;
+ orientation = <2>;
+
+ port {
+ cam_endpoint: endpoint {
+ clock-lanes = <0>;
+ data-lanes = <1 2>;
+ clock-noncontinuous;
+ link-frequencies =
+ /bits/ 64 <456000000>;
+ };
+ };
+};
+
+vcm_node: dw9817_arducam64mp@c {
+ compatible = "dongwoon,dw9817-vcm";
+ reg = <0x0c>;
+ status = "disabled";
+ VDD-supply = <&cam1_reg>;
+};