A FanControl plugin for newer Dell laptops whose fan controls can't be reached by the built-in Dell plugin.
The built-in Dell plugin talks to the BIOS through the old I/O-port SMM interface. Many recent Dell machines no longer answer on that interface and only accept the same SMM commands over ACPI-WMI (the LegacyDiags class in root\dcim\sysman\diagnostics). On those machines the built-in plugin shows no fans at all. This plugin uses the WMI route instead, the same approach the Linux dell-smm-hwmon driver uses on modern Dells.
- Fan RPM for each fan the BIOS reports
- Fan control per fan, paired automatically with its RPM sensor
- BIOS temperature sensors (CPU and board sensors)
No kernel driver is installed. Everything goes through Dell's own WMI interface.
| Model | BIOS fan levels | Status |
|---|---|---|
| Dell Latitude 5540 | Off / ~2,400 / ~4,000 RPM | Reading and control working |
Other Dell models that expose LegacyDiags may work. Reading RPM and temperatures is very likely to work on them. Fan control depends on whether the BIOS accepts the 0x30A3 / 0x31A3 manual/automatic command pair. If you test another model, please open an issue with the results.
- Windows 10/11
- FanControl V281 or newer (.NET 10 build)
- FanControl running as administrator
Run this in an admin PowerShell. If it lists LegacyDiags with an Execute method, the interface is there:
Get-CimClass -Namespace root\dcim\sysman\diagnostics -ClassName LegacyDiags | Select CimClassName, CimClassMethods- Download
FanControl.DellWmiPlugin.dllfrom the Releases page. - Close FanControl.
- Create the folder
C:\Program Files (x86)\FanControl\Plugins\DellWmiand copy the DLL into it. - Optional: move the built-in
Plugins\DellPluginfolder out ofPlugins. On unsupported machines it only produces errors. - Start FanControl as administrator.
Or, from an admin PowerShell after downloading the DLL to your Downloads folder:
$fc = 'C:\Program Files (x86)\FanControl'
Stop-Process -Name FanControl -Force -ErrorAction SilentlyContinue
New-Item -ItemType Directory "$fc\Plugins\DellWmi" -Force | Out-Null
Copy-Item "$env:USERPROFILE\Downloads\FanControl.DellWmiPlugin.dll" "$fc\Plugins\DellWmi\" -Force
Unblock-File "$fc\Plugins\DellWmi\FanControl.DellWmiPlugin.dll"If FanControl reports missing Dell/... sensors afterwards, those entries belong to the old plugin. Remove the old cards from your configuration.
Dell laptop fans only run at a few fixed levels, not continuous speeds. The plugin picks the level whose nominal RPM is closest to the requested percentage of maximum RPM. On the Latitude 5540 that works out to:
| Curve output | Fan level |
|---|---|
| Below 30% | Off |
| 30–80% | Low (~2,400 RPM) |
| Above 80% | High (~4,000 RPM) |
- Emergency override: if the BIOS CPU sensor reaches 95 °C, the fan is forced to its highest level regardless of your curve.
- Hand-back on exit: when FanControl closes, or a control is set back to automatic, the plugin re-enables the BIOS's own fan control.
- Sleep/resume: if the BIOS takes control back after resume, the plugin notices within about 20 seconds and re-applies your setting.
- Crashes: if FanControl is killed or crashes, the fan stays at its last level until you reboot or run the restore command below.
Restore BIOS automatic fan control manually (admin PowerShell):
$i = Get-CimInstance -Namespace root\dcim\sysman\diagnostics -ClassName LegacyDiags | Select -First 1
$b = [byte[]][BitConverter]::GetBytes([uint32]0x31a3); $z = [byte[]](0,0,0,0)
Invoke-CimMethod -InputObject $i -MethodName Execute -Arguments @{EaxLen=[uint32]4;EaxVal=$b;EbxLen=[uint32]4;EbxVal=$z;EcxLen=[uint32]4;EcxVal=$z;EdxLen=[uint32]4;EdxVal=$z} | Out-NullUse at your own risk. The SMM commands were reverse-engineered by the Linux community, not documented by Dell. Test on your own machine and watch temperatures at first.
Requires the .NET 10 SDK.
dotnet build src -c Release
The output is src/bin/Release/net10.0/FanControl.DellWmiPlugin.dll. The lib folder holds the two reference assemblies needed to compile: FanControl.Plugins.dll from FanControl and System.Management.dll from .NET. Both already ship with FanControl, so they are not copied to the output.
- FanControl by Rémi Mercier, and the original FanControl.DellPlugin
- The Linux dell-smm-hwmon driver documentation, for the SMM command set and the WMI SMM interface
MIT. See LICENSE.