1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
From 9762b3a015886c42941f535e688ffac1f56e35aa Mon Sep 17 00:00:00 2001
From: Phil Elwell <phil@raspberrypi.org>
Date: Tue, 18 Sep 2018 11:08:07 +0100
Subject: [PATCH] BCM270X_DT: Add gpio-fan overlay
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
---
arch/arm/boot/dts/overlays/Makefile | 1 +
arch/arm/boot/dts/overlays/README | 8 +++
.../boot/dts/overlays/gpio-fan-overlay.dts | 71 +++++++++++++++++++
3 files changed, 80 insertions(+)
create mode 100644 arch/arm/boot/dts/overlays/gpio-fan-overlay.dts
--- a/arch/arm/boot/dts/overlays/Makefile
+++ b/arch/arm/boot/dts/overlays/Makefile
@@ -33,6 +33,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
fe-pi-audio.dtbo \
goodix.dtbo \
googlevoicehat-soundcard.dtbo \
+ gpio-fan.dtbo \
gpio-ir.dtbo \
gpio-ir-tx.dtbo \
gpio-key.dtbo \
--- a/arch/arm/boot/dts/overlays/README
+++ b/arch/arm/boot/dts/overlays/README
@@ -541,6 +541,14 @@ Load: dtoverlay=googlevoicehat-soundca
Params: <None>
+Name: gpio-fan
+Info: Configure a GPIO pin to control a cooling fan.
+Load: dtoverlay=gpio-fan,<param>=<val>
+Params: gpiopin GPIO used to control the fan (default 12)
+ temp Temperature at which the fan switches on, in
+ millicelcius (default 55000)
+
+
Name: gpio-ir
Info: Use GPIO pin as rc-core style infrared receiver input. The rc-core-
based gpio_ir_recv driver maps received keys directly to a
--- /dev/null
+++ b/arch/arm/boot/dts/overlays/gpio-fan-overlay.dts
@@ -0,0 +1,71 @@
+/*
+ * Overlay for the Raspberry Pi GPIO Fan @ BCM GPIO12.
+ * Optional parameters:
+ * - "gpiopin" - default GPIO12
+ * - "temp" - default 55000
+ * Requires:
+ * - kernel configurations: CONFIG_SENSORS_GPIO_FAN=m and CONFIG_SENSORS_PWM_FAN=m;
+ * - kernel rebuid;
+ * - DC Fan connected to GPIO via a N-MOSFET (2N7002)
+ *
+ * ┌─────────────────────┐
+ * │Fan negative terminal│
+ * └┬────────────────────┘
+ * │
+ * │──┘
+ * [GPIO12]──────┤ │<─┐ 2N7002
+ * │──┤
+ * │
+ * ─┴─
+ * GND
+ *
+ * sudo dtc -W no-unit_address_vs_reg -@ -I dts -O dtb -o /boot/overlays/gpio-fan.dtbo gpio-fan.dts
+ * sudo nano /boot/config.txt add "dtoverlay=gpio-fan" or "dtoverlay=gpio-fan,gpiopin=12,temp=45000"
+ * or
+ * sudo sh -c "echo '\n# Enable PI GPIO-Fan\ndtoverlay=gpio-fan\n' >> /boot/config.txt"
+ * sudo sh -c "echo '\n# Enable PI GPIO-Fan\ndtoverlay=gpio-fan,gpiopin=12\n' >> /boot/config.txt"
+ *
+ */
+/dts-v1/;
+/plugin/;
+
+/ {
+ compatible = "brcm,bcm2708";
+
+ fragment@0 {
+ target-path = "/";
+ __overlay__ {
+ fan0: gpio-fan@0 {
+ compatible = "gpio-fan";
+ gpios = <&gpio 12 1>;
+ 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 = <5000>; /* (millicelsius) Fan stopped at 50°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";
+ };
+};
|