I’ve purchased an official PoE+ HAT for use with a Raspberry Pi 4.
Note this is different from the PoE HAT i.e. it uses a different overlay rpi-poe-plus vs rpi-poe.
I have confirmed the PoE+ HAT hardware is working correctly by completing the following:
- Clean install using 2025-12-04-raspios-trixie-armhf-lite.img
Fan spins as expected when temp is higher than 40℃ - Clean install using OSMC_TGT_rbp4_20251201.img
Fan spins during initial install wizard stage
Fan does not spin after completing install wizard
The rpi-poe-plus overlay default configuration will turn the fan on at 40℃ (see dtoverlay output below).
The RPi4 temp is higher than 40℃ however the fan is not spinning.
osmc@osmc:~$ vcgencmd measure_temp
temp=52.1’C
The rpi-poe-plus.dtbo overlay is loaded:
osmc@osmc:~$ sudo vcdbg log msg
005220.365: brfs: File read: /mfs/sd/overlays/rpi-poe-plus.dtbo
005239.197: Loaded overlay ‘rpi-poe-plus’
osmc@osmc:~$ cat /sys/firmware/devicetree/base/rpi-poe-power-supply/status
okay
However these commands suggest it’s not actually loaded.
osmc@osmc:~$ dtoverlay -l
No overlays loaded
osmc@osmc:~$ cat /sys/class/thermal/cooling_device0/type
cat: /sys/class/thermal/cooling_device0/type: No such file or directory
Manually adding the overlay returns an error:
osmc@osmc:~$ sudo dtoverlay -v rpi-poe-plus
DTOVERLAY[debug]: using platform ‘bcm2711’
DTOVERLAY[debug]: overlay map loaded
run_cmd: which dtoverlay-pre >/dev/null 2>&1 && dtoverlay-pre
DTOVERLAY[debug]: loading file ‘/boot/overlays/rpi-poe-plus.dtbo’
DTOVERLAY[debug]: fragment 5 disabled
DTOVERLAY[debug]: fragment 6 disabled
DTOVERLAY[debug]: merge_fragment(/fragment@4/overlay/poe@51,/fragment@11/overlay)
DTOVERLAY[debug]: merge_fragment(/fragment@4/overlay/poe@51/rpi-poe-power-supply@f2,/fragment@11/overlay/rpi-poe-power-supply@f2)
DTOVERLAY[debug]: +prop(compatible)
DTOVERLAY[debug]: +prop(reg)
DTOVERLAY[debug]: +prop(status)
DTOVERLAY[debug]: merge_fragment() end
DTOVERLAY[debug]: merge_fragment() end
DTOVERLAY[debug]: wrote 4337 bytes to ‘/tmp/.dtoverlays/0_rpi-poe-plus.dtbo’
DTOVERLAY[debug]: wrote 4337 bytes to ‘/sys/kernel/config/device-tree/overlays/0_rpi-poe-plus/dtbo’
Failed to apply overlay ‘0_rpi-poe-plus’ (kernel)
run_cmd: which dtoverlay-post >/dev/null 2>&1 && dtoverlay-post
Adding the following to /boot/firmware/config-user.txt does not change the behaviour.
dtoverlay=rpi-poe-plus
dtparam=poe_fan_temp0=50000
dtparam=poe_fan_temp1=60000
dtparam=poe_fan_temp2=70000
dtparam=poe_fan_temp3=80000
It appears a similar issue occurred with the original PoE HAT.
This post PoE fan issue - #28 by porksoda103 suggests the culprit is the missing cooling_device0 device.
I wonder if there is a kernel option that needs to be enabled.
Looking at the kernel config this is what I see but I have no idea what might be required.
Perhaps CONFIG_PWM_RASPBERRYPI_POE based on this thread PoE+ Hat fan not spinning unless manually setting the overlay. · Issue #1734 · raspberrypi/firmware · GitHub which indicates pwn-fan is used (in Raspberry Pi OS).
osmc@osmc:/proc$ less /boot/config-5.15.92-1-osmc | grep POE
CONFIG_PPPOE=m
CONFIG_RPI_POE_POWER=y
CONFIG_MFD_RASPBERRYPI_POE_HAT is not set
CONFIG_PWM_RASPBERRYPI_POE is not set
osmc@osmc:/proc$ less /boot/config-5.15.92-1-osmc | grep FAN
CONFIG_SENSORS_AXI_FAN_CONTROL is not set
CONFIG_SENSORS_GPIO_FAN=m
CONFIG_SENSORS_PWM_FAN is not set
CONFIG_REGULATOR_FAN53555 is not set
CONFIG_REGULATOR_FAN53880 is not set
CONFIG_FANOTIFY=y
CONFIG_FANOTIFY_ACCESS_PERMISSIONS is not set
osmc@osmc:/proc$ less /boot/config-5.15.92-1-osmc | grep RPI
CONFIG_JOYSTICK_RPISENSE=m
CONFIG_RPIVID_MEM=m
CONFIG_RPI_POE_POWER=y
CONFIG_MFD_RPISENSE_CORE=m
CONFIG_FB_RPISENSE=m
CONFIG_BACKLIGHT_RPI=m
CONFIG_SND_BCM2708_SOC_RPI_CIRRUS=m
CONFIG_SND_BCM2708_SOC_RPI_DAC=m
CONFIG_SND_BCM2708_SOC_RPI_PROTO=m
CONFIG_SND_RPI_SIMPLE_SOUNDCARD=m
CONFIG_SND_RPI_WM8804_SOUNDCARD=m
CONFIG_VIDEO_RPIVID=m
CONFIG_RPI_AXIPERF=m
Raspberry Pi 4 details:
osmc@osmc:~$ cat /sys/firmware/devicetree/base/model
Raspberry Pi 4 Model B Rev 1.5
osmc@osmc:~$ uname -r
5.15.92-1-osmc
osmc@osmc:~$ vcgencmd version
Apr 25 2023 18:26:56
Copyright (c) 2012 Broadcom
version d7f9c2b4ef7e4a8c0b04374a879ce89d7a948453 (clean) (release) (start_x)
Current /boot/config-user.txt configuration:
osmc@osmc:~$ cat /boot/config-user.txt
dtoverlay=pisound
dtparam=audio=on
audio_pwm_mode=2
disable_audio_dither=1
dtparam=poe_fan_temp0=40000
dtparam=poe_fan_temp1=50000
dtparam=poe_fan_temp2=60000
dtparam=poe_fan_temp3=70000
dtoverlay output for rpi-poe-plus showing default config
osmc@osmc:~$ dtoverlay -h rpi-poe-plus
Name: rpi-poe-plus
Info: Raspberry Pi PoE+ HAT fan
Usage: dtoverlay=rpi-poe-plus,[=]
Params: poe_fan_temp0 Temperature (in millicelcius) at which the fan turns on (default 40000)
poe_fan_temp0_hyst Temperature delta (in millicelcius) at which the fan turns off (default 2000)
poe_fan_temp1 Temperature (in millicelcius) at which the fan speeds up (default 45000)
poe_fan_temp1_hyst Temperature delta (in millicelcius) at which the fan slows down (default 2000)
poe_fan_temp2 Temperature (in millicelcius) at which the fan speeds up (default 50000)
poe_fan_temp2_hyst Temperature delta (in millicelcius) at which the fan slows down (default 2000)
poe_fan_temp3 Temperature (in millicelcius) at which the fan speeds up (default 55000)
poe_fan_temp3_hyst Temperature delta (in millicelcius) at which the fan slows down (default 5000)
i2c Control the fan via Linux I2C drivers instead of the firmware.