aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/boot/dts/overlays/gpio-fan-overlay.dts
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/boot/dts/overlays/gpio-fan-overlay.dts')
-rw-r--r--arch/arm/boot/dts/overlays/gpio-fan-overlay.dts79
1 files changed, 79 insertions, 0 deletions
diff --git a/arch/arm/boot/dts/overlays/gpio-fan-overlay.dts b/arch/arm/boot/dts/overlays/gpio-fan-overlay.dts
new file mode 100644
index 000000000000..0b14981b4824
--- /dev/null
+++ b/arch/arm/boot/dts/overlays/gpio-fan-overlay.dts
@@ -0,0 +1,79 @@
+/*
+ * Overlay for the Raspberry Pi GPIO Fan @ BCM GPIO12.
+ * References:
+ * - https://www.raspberrypi.org/forums/viewtopic.php?f=107&p=1367135#p1365084
+ *
+ * Optional parameters:
+ * - "gpiopin" - BCM number of the pin driving the fan, default 12 (GPIO12);
+ * - "temp" - CPU temperature at which fan is started in millicelsius, default 55000;
+ *
+ * Requires:
+ * - kernel configurations: CONFIG_SENSORS_GPIO_FAN=m;
+ * - kernel rebuild;
+ * - N-MOSFET connected to gpiopin, 2N7002-[https://en.wikipedia.org/wiki/2N7000];
+ * - DC Fan connected to N-MOSFET Drain terminal, a 12V fan is working fine and quite silently;
+ * [https://www.tme.eu/en/details/ee40101s1-999-a/dc12v-fans/sunon/ee40101s1-1000u-999/]
+ *
+ * ┌─────────────────────┐
+ * │Fan negative terminal│
+ * └┬────────────────────┘
+ * │D
+ * G │──┘
+ * [GPIO12]──────┤ │<─┐ 2N7002
+ * │──┤
+ * │S
+ * ─┴─
+ * GND
+ *
+ * Build:
+ * - `sudo dtc -W no-unit_address_vs_reg -@ -I dts -O dtb -o /boot/overlays/gpio-fan.dtbo gpio-fan-overlay.dts`
+ * Activate:
+ * - sudo nano /boot/config.txt add "dtoverlay=gpio-fan" or "dtoverlay=gpio-fan,gpiopin=12,temp=45000"
+ * or
+ * - sudo sh -c 'printf "\n# Enable PI GPIO-Fan Default\ndtoverlay=gpio-fan\n" >> /boot/config.txt'
+ * - sudo sh -c 'printf "\n# Enable PI GPIO-Fan Custom\ntoverlay=gpio-fan,gpiopin=12,temp=45000\n" >> /boot/config.txt'
+ *
+ */
+/dts-v1/;
+/plugin/;
+
+/ {
+ compatible = "brcm,bcm2835";
+
+ fragment@0 {
+ target-path = "/";
+ __overlay__ {
+ fan0: gpio-fan@0 {
+ compatible = "gpio-fan";
+ gpios = <&gpio 12 0>;
+ gpio-fan,speed-map = <0 0>,
+ <5000 1>;
+ #cooling-cells = <2>;
+ };
+ };
+ };
+
+ fragment@1 {
+ target = <&cpu_thermal>;
+ polling-delay = <2000>; /* milliseconds */
+ __overlay__ {
+ trips {
+ cpu_hot: trip-point@0 {
+ temperature = <55000>; /* (millicelsius) Fan started at 55°C */
+ hysteresis = <10000>; /* (millicelsius) Fan stopped at 45°C */
+ type = "active";
+ };
+ };
+ cooling-maps {
+ map0 {
+ trip = <&cpu_hot>;
+ cooling-device = <&fan0 1 1>;
+ };
+ };
+ };
+ };
+ __overrides__ {
+ gpiopin = <&fan0>,"gpios:4", <&fan0>,"brcm,pins:0";
+ temp = <&cpu_hot>,"temperature:0";
+ };
+};