dt: Create static regulators and clocks for camera nodes
authorDave Stevenson <dave.stevenson@raspberrypi.com>
Sat, 20 Nov 2021 10:48:36 +0000 (10:48 +0000)
committerDom Cobley <popcornmix@gmail.com>
Mon, 21 Mar 2022 16:04:33 +0000 (16:04 +0000)
Unloading regulators through dynamic device tree doesn't work
as the regulators will unregister whilst clients are still
registered. Whilst the regulator framework does WARN when that
happens, the client putting the regulator then typically results
in a NULL dereference and badness.

Instead of creating regulators and clocks from the overlays,
create regulators and clocks for the sensors in the base DT.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
16 files changed:
arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
arch/arm/boot/dts/bcm2708-rpi-b-rev1.dts
arch/arm/boot/dts/bcm2708-rpi-b.dts
arch/arm/boot/dts/bcm2708-rpi-cm.dts
arch/arm/boot/dts/bcm2708-rpi-zero-w.dts
arch/arm/boot/dts/bcm2708-rpi-zero.dts
arch/arm/boot/dts/bcm2709-rpi-2-b.dts
arch/arm/boot/dts/bcm270x.dtsi
arch/arm/boot/dts/bcm2710-rpi-2-b.dts
arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts
arch/arm/boot/dts/bcm2710-rpi-3-b.dts
arch/arm/boot/dts/bcm2710-rpi-cm3.dts
arch/arm/boot/dts/bcm2710-rpi-zero-2-w.dts
arch/arm/boot/dts/bcm2711-rpi-4-b.dts
arch/arm/boot/dts/bcm2711-rpi-cm4.dts
arch/arm/boot/dts/bcm283x-rpi-cam1-regulator.dtsi [deleted file]

index e42cba8..a7d6427 100644 (file)
@@ -5,7 +5,6 @@
 #include "bcm283x-rpi-smsc9514.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
 #include "bcm283x-rpi-i2c0mux_0_28.dtsi"
-#include "bcm283x-rpi-cam1-regulator.dtsi"
 
 / {
        compatible = "raspberrypi,model-b-plus", "brcm,bcm2835";
        gpio = <&gpio 41 GPIO_ACTIVE_HIGH>;
 };
 
+cam0_reg: &cam_dummy_reg {
+};
+
 / {
        __overrides__ {
                act_led_gpio = <&act_led>,"gpios:4";
index 4ea1e68..af1b477 100644 (file)
@@ -4,7 +4,6 @@
 #include "bcm2708-rpi.dtsi"
 #include "bcm283x-rpi-smsc9512.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
-#include "bcm283x-rpi-cam1-regulator.dtsi"
 
 / {
        compatible = "raspberrypi,model-b", "brcm,bcm2835";
@@ -123,6 +122,9 @@ i2c_csi_dsi: &i2c1 {
        gpio = <&gpio 27 GPIO_ACTIVE_HIGH>;
 };
 
+cam0_reg: &cam_dummy_reg {
+};
+
 / {
        __overrides__ {
                act_led_gpio = <&act_led>,"gpios:4";
index a152c1c..a531625 100644 (file)
@@ -5,7 +5,6 @@
 #include "bcm283x-rpi-smsc9512.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
 #include "bcm283x-rpi-i2c0mux_0_28.dtsi"
-#include "bcm283x-rpi-cam1-regulator.dtsi"
 
 / {
        compatible = "raspberrypi,model-b", "brcm,bcm2835";
        gpio = <&gpio 21 GPIO_ACTIVE_HIGH>;
 };
 
+cam0_reg: &cam_dummy_reg {
+};
+
 / {
        __overrides__ {
                act_led_gpio = <&act_led>,"gpios:4";
index f61e341..d65f9db 100644 (file)
@@ -8,21 +8,14 @@
 / {
        compatible = "raspberrypi,compute-module", "brcm,bcm2835";
        model = "Raspberry Pi Compute Module";
+};
 
-       cam1_reg: cam1_reg {
-               compatible = "regulator-fixed";
-               regulator-name = "cam1-regulator";
-               gpio = <&gpio 2 GPIO_ACTIVE_HIGH>;
-               enable-active-high;
-               status = "disabled";
-       };
-       cam0_reg: cam0_reg {
-               compatible = "regulator-fixed";
-               regulator-name = "cam0-regulator";
-               gpio = <&gpio 30 GPIO_ACTIVE_HIGH>;
-               enable-active-high;
-               status = "disabled";
-       };
+&cam1_reg {
+       gpio = <&gpio 2 GPIO_ACTIVE_HIGH>;
+};
+
+cam0_reg: &cam0_regulator {
+       gpio = <&gpio 30 GPIO_ACTIVE_HIGH>;
 };
 
 &uart0 {
index 63faf49..e4c6c35 100644 (file)
@@ -5,7 +5,6 @@
 #include "bcm283x-rpi-csi1-2lane.dtsi"
 #include "bcm283x-rpi-i2c0mux_0_28.dtsi"
 #include "bcm2708-rpi-bt.dtsi"
-#include "bcm283x-rpi-cam1-regulator.dtsi"
 
 / {
        compatible = "raspberrypi,model-zero-w", "brcm,bcm2835";
        gpio = <&gpio 44 GPIO_ACTIVE_HIGH>;
 };
 
+cam0_reg: &cam_dummy_reg {
+};
+
 / {
        __overrides__ {
                act_led_gpio = <&act_led>,"gpios:4";
index 84591bd..19dae0d 100644 (file)
@@ -4,7 +4,6 @@
 #include "bcm2708-rpi.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
 #include "bcm283x-rpi-i2c0mux_0_28.dtsi"
-#include "bcm283x-rpi-cam1-regulator.dtsi"
 
 / {
        compatible = "raspberrypi,model-zero", "brcm,bcm2835";
        gpio = <&gpio 41 GPIO_ACTIVE_HIGH>;
 };
 
+cam0_reg: &cam_dummy_reg {
+};
+
 / {
        __overrides__ {
                act_led_gpio = <&act_led>,"gpios:4";
index e1381d2..4c80d15 100644 (file)
@@ -5,7 +5,6 @@
 #include "bcm283x-rpi-smsc9514.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
 #include "bcm283x-rpi-i2c0mux_0_28.dtsi"
-#include "bcm283x-rpi-cam1-regulator.dtsi"
 
 / {
        compatible = "raspberrypi,2-model-b", "brcm,bcm2836";
        gpio = <&gpio 41 GPIO_ACTIVE_HIGH>;
 };
 
+cam0_reg: &cam_dummy_reg {
+};
+
 / {
        __overrides__ {
                act_led_gpio = <&act_led>,"gpios:4";
index 49f9019..a5cabb5 100644 (file)
                };
        };
 
+       cam1_reg: cam1_regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "cam1-reg";
+               enable-active-high;
+               /* Needs to be enabled, as removing a regulator is very unsafe */
+               status = "okay";
+       };
+
+       cam1_clk: cam1_clk {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               status = "disabled";
+       };
+
+       cam0_regulator: cam0_regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "cam0-reg";
+               enable-active-high;
+               status = "disabled";
+       };
+
+       cam0_clk: cam0_clk {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               status = "disabled";
+       };
+
+       cam_dummy_reg: cam_dummy_reg {
+               compatible = "regulator-fixed";
+               regulator-name = "cam-dummy-reg";
+               status = "okay";
+       };
+
        __overrides__ {
                cam0-pwdn-ctrl;
                cam0-pwdn;
index ae9db1b..a8a18ef 100644 (file)
@@ -5,7 +5,6 @@
 #include "bcm283x-rpi-smsc9514.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
 #include "bcm283x-rpi-i2c0mux_0_28.dtsi"
-#include "bcm283x-rpi-cam1-regulator.dtsi"
 
 / {
        compatible = "raspberrypi,2-model-b-rev2", "brcm,bcm2837";
        gpio = <&gpio 41 GPIO_ACTIVE_HIGH>;
 };
 
+cam0_reg: &cam_dummy_reg {
+};
+
 / {
        __overrides__ {
                act_led_gpio = <&act_led>,"gpios:4";
index a1b169e..93f9c8d 100644 (file)
@@ -6,7 +6,6 @@
 #include "bcm283x-rpi-csi1-2lane.dtsi"
 #include "bcm283x-rpi-i2c0mux_0_44.dtsi"
 #include "bcm271x-rpi-bt.dtsi"
-#include "bcm283x-rpi-cam1-regulator.dtsi"
 
 / {
        compatible = "raspberrypi,3-model-b-plus", "brcm,bcm2837";
        gpio = <&expgpio 5 GPIO_ACTIVE_HIGH>;
 };
 
+cam0_reg: &cam_dummy_reg {
+};
+
 / {
        __overrides__ {
                act_led_gpio = <&act_led>,"gpios:4";
index 5cfb9ad..bc5d086 100644 (file)
@@ -6,7 +6,6 @@
 #include "bcm283x-rpi-csi1-2lane.dtsi"
 #include "bcm283x-rpi-i2c0mux_0_44.dtsi"
 #include "bcm271x-rpi-bt.dtsi"
-#include "bcm283x-rpi-cam1-regulator.dtsi"
 
 / {
        compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
        gpio = <&expgpio 5 GPIO_ACTIVE_HIGH>;
 };
 
+cam0_reg: &cam_dummy_reg {
+};
+
 / {
        __overrides__ {
                act_led_gpio = <&act_led>,"gpios:4";
index c386a85..e3bb24f 100644 (file)
@@ -8,21 +8,14 @@
 / {
        compatible = "raspberrypi,3-compute-module", "brcm,bcm2837";
        model = "Raspberry Pi Compute Module 3";
+};
 
-       cam1_reg: cam1_reg {
-               compatible = "regulator-fixed";
-               regulator-name = "cam1-regulator";
-               gpio = <&gpio 2 GPIO_ACTIVE_HIGH>;
-               enable-active-high;
-               status = "disabled";
-       };
-       cam0_reg: cam0_reg {
-               compatible = "regulator-fixed";
-               regulator-name = "cam0-regulator";
-               gpio = <&gpio 30 GPIO_ACTIVE_HIGH>;
-               enable-active-high;
-               status = "disabled";
-       };
+&cam1_reg {
+       gpio = <&gpio 2 GPIO_ACTIVE_HIGH>;
+};
+
+cam0_reg: &cam0_regulator {
+       gpio = <&gpio 30 GPIO_ACTIVE_HIGH>;
 };
 
 &uart0 {
index 1cd3d01..38629eb 100644 (file)
@@ -5,7 +5,6 @@
 #include "bcm283x-rpi-csi1-2lane.dtsi"
 #include "bcm283x-rpi-i2c0mux_0_44.dtsi"
 #include "bcm2708-rpi-bt.dtsi"
-#include "bcm283x-rpi-cam1-regulator.dtsi"
 
 / {
        compatible = "raspberrypi,model-zero-2-w", "brcm,bcm2837";
        gpio = <&gpio 40 GPIO_ACTIVE_HIGH>;
 };
 
+cam0_reg: &cam_dummy_reg {
+};
+
 / {
        __overrides__ {
                act_led_gpio = <&act_led>,"gpios:4";
index f6e0247..8c0ab39 100644 (file)
 #include "bcm2711-rpi-ds.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
 #include "bcm283x-rpi-i2c0mux_0_44.dtsi"
-#include "bcm283x-rpi-cam1-regulator.dtsi"
 
 / {
        chosen {
        gpio = <&expgpio 5 GPIO_ACTIVE_HIGH>;
 };
 
+cam0_reg: &cam_dummy_reg {
+};
+
 / {
        __overrides__ {
                act_led_gpio = <&act_led>,"gpios:4";
index b688ac1..062e888 100644 (file)
 #include "bcm283x-rpi-csi0-2lane.dtsi"
 #include "bcm283x-rpi-csi1-4lane.dtsi"
 #include "bcm283x-rpi-i2c0mux_0_44.dtsi"
-#include "bcm283x-rpi-cam1-regulator.dtsi"
 
 / {
        chosen {
diff --git a/arch/arm/boot/dts/bcm283x-rpi-cam1-regulator.dtsi b/arch/arm/boot/dts/bcm283x-rpi-cam1-regulator.dtsi
deleted file mode 100644 (file)
index 55237d0..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-
-/ {
-       cam1_reg: cam1_reg {
-               compatible = "regulator-fixed";
-               regulator-name = "cam1-reg";
-               enable-active-high;
-               status = "disabled";
-       };
-};